package com.heima.string; public class Demo1_String { /* * a:字符串面值“abc”也可以看成一个字符串对象 * b:字符串是常量,一旦被赋值,不能被更改 * */ public static void main(String[] args) { String str="abc"; //abc可以看作一个字符串对象 System.out.println(str); //String类重写了toSring方法,返回的是该对象本身 str="def"; System.out.println(str);//当把def赋值给str时,原来的abc就变成了垃圾。这就是所谓的一旦被赋值不能改变 } }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
string类的常见构造方法
package com.heima.string; public class Demo2_String { /* * String类的常见构造方法 * public String() 空构造 * public String(byte[] bytes)把字节数组转换成字符串 * public String(Byte[] bytes,int index,int length)把字节数组的一部分转换成字符串 * public String(char[] value,int index,int count)把字符数组一部分转换成字符串 * public String(char[] value)把字符数组转换成字符串 * public String(String original0把字符常量转换成字符串 * */ public static void main(String[] args) { String s1=new String(); System.out.println(s1);//空构造 byte[] arr1={97,98,99}; String s2=new String(arr1);//解码,将计算机看得懂的转换成我们看的懂的 System.out.println(s2);//打印结果是abc,对应的asiic码值,其实用的是平台默认的GDk码表 byte[] arr2={97,98,99,100,101,102}; String s3=new String(arr2,2,3);//从2开始转三个 System.out.println(s3); char[] data={'a','b','c','d','e'}; String s4=new String(data);//将字符数组转换成字符串 System.out.println(s4); char[] data2={'a','b','c','d','e'}; String s5=new String(data2,2,3);//从2开始转换3个 System.out.println(s5); String s6=new String("heima");//把字符常量转换成字符串,没啥意思,一般不用 System.out.println(s6); } }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。、
string类的经典面试题
package com.heima.string; public class Demo3_String { public static void main(String[] args) { demo1();//常量池中没有这个字符串对象就创建一个,如果有,就直接用 demo2();//创建了俩个对象,一个在常量池中,一个在对内存中 demo3(); demo4(); demo5(); } private static void demo5() { String s1="ab"; String s2="abc"; String s3=s1+"c"; System.out.println(s3==s2);//返回false,因为: //主方法进栈,在常量池内创建”ab“和”abc“,分别把地址赋值给s1和s2,然后用StringBuffer方法在堆内存中”abc“(创建的s3是由”ab“加上”c“) //然后用toString方法转换成String类,把转换后的地址复制给s3.所以地址不一样。 System.out.println(s3.equals(s2));//这个结果一定是ture } private static void demo4() {//两个结果都是true,因为Java内有常量优化机制,在“a”+“b”+“c”时,已经优化为 //“abc”,所以s2创建对象时,已经存在abc对象,不用重新创建了 String s1="a"+"b"+"c"; String s2="abc"; System.out.println(s1==s2); System.out.println(s1.equals(s2)); } private static void demo3() { String s1=new String("abc"); String s2="abc"; System.out.println(s1==s2); //这个结果是false,因为地址值不一样,一个记录的是对内存对象的地址值,一个记录的是常量值对象中的地址 System.out.println(s1.equals(s2));//这个返回true,以为字符序列是一样的 } private static void demo2() { String s1=new String("abc");//问:创建了几个对象 System.out.println(s1); } private static void demo1() { String s2="abc"; String s1="abc"; System.out.println(s1==s2); System.out.println(s1.equals(s2));//两个答案都是true } }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
string类的常用方法
package com.heima.string; /* * String的判断方法 * boolean equal(object obj)//比较字符串内容 * boolean equalsIgonrecase(String obj)比较字符串内容忽略大小写 * boolean contains(String str)//判断是否包含传入的字符串 * */ public class Demo4_StringMethod { public static void main(String[] args){ //demo1(); 抽取方法 //demo2(); //demo(); String s1="heima"; String s2=""; String s3=null;//""和null的区别,首先”“是字符串常量同时也是一个string类的对象,既然是对象当然可以调用string类的方法 //但是null是空常量,不能调用任何方法,否则会出现空指针异常。null常量可以给容易的引用数据类型赋值 System.out.println(s1.isEmpty()); System.out.println(s2.isEmpty()); //System.out.println(s3.isEmpty()); } private static void demo() { String s1="woai haha"; String s2="wo jiji"; String s3="ha"; System.out.println(s1.endsWith(s3));//判断s1是否以s3结尾 System.out.println(s1.startsWith(s2));//判断s1是否以s2开头 } private static void demo2() {//判断是否包含传入的字符串 String s1="我爱heima,哈好"; String s2="heima"; System.out.println(s1.contains(s2)); } private static void demo1() {//比较字符串内容 String s1="heima"; String s2="heima"; String s3="Heima"; System.out.println(s1.equals(s2)); System.out.println(s2.equals(s3)); System.out.println(s2.equalsIgnoreCase(s3)); } }
package com.heima.string; /* * int length()获取字符串长度 * char charAt(int index)//获取索引位置的字符 * int indexOf(int ch)返回指定字符在字符串中第一次出现的索引 * int indexOf(Stirng str)返回指定字符在字符串中第一次出现的索引 * int indexOf(int ch,String str)返回指定字符在指定位置后第一次出现的索引 * int indexOf(String str,int formIndex)返回指定字符串在指定位置后第一次出现的索引 * String substring(int start)从指定位置开始截取字符串,到末尾结束 * String substring(int start,int end)从指定开始位置到指定结束位置截取字符串 * */ public class Demo5_StringMethod { public static void main(String[] args){ String s1="heiam"; String w="e"; System.out.println(s1.length()); System.out.println(s1.charAt(2)); System.out.println(s1.indexOf(2)); System.out.println(s1.indexOf(w)); String we=s1.substring(2, 4); System.out.println(we); } }
package com.heima.string; public class Demo6_StringMethod { /* * byte[] getBytes()把字符串转换成字节数组 * char[] tocharArray()把字符串转换成字符数组 * static String valueOf(char[] chs)把字符数组转换成字符串 * static String valueOf(int i)把int类型数据转化成字符串 *注意: * String类的value函数可以把任意类型数据转换成字符串 * *string toLowCase()字符串转换成小写 *String toUpperCase()字符串转换成大写 *String conCat(String str)把字符串拼凑 * */ public static void main(String[] args) { demo2(); demo3(); } private static void demo3() { String s="heiam"; String s2=" buxing"; System.out.println(s.concat(s2)); } private static void demo2() { String s1="ajoidh"; byte[] arr=s1.getBytes(); for(int i=0;i<s1.length();i++){ System.out.println(arr[i]);} String s2="你好你好"; byte[] arr2=s2.getBytes();//GBK码表,将字符串转换成字节数组,一个中文两个字节,中文的第一个字节一定是负数 for(int o=0;o<s2.length();o++){ System.out.println(arr2[o]); } demo1(s1); } private static void demo1(String s1) { char[] array=s1.toCharArray(); for(int r=0;r<s1.length();r++){ System.out.print(array[r]); } }}
package com.heima.string; public class Demo7_StringMethod { /* * replace(char old,char new)用新字符替代旧字符 * String replace(String old,String new)用新字符串替代旧字符串 * string trim()去除字符串两端空格 * */ public static void main(String[] args) { String s="hehehehe"; String s2=s.replace('h', 'q'); System.out.println(s2); } }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
模拟用户登陆demo
package com.heima.string; public class Demo7_StringMethod { /* * replace(char old,char new)用新字符替代旧字符 * String replace(String old,String new)用新字符串替代旧字符串 * string trim()去除字符串两端空格 * */ public static void main(String[] args) { String s="hehehehe"; String s2=s.replace('h', 'q'); System.out.println(s2); } }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
统计不同字符个数demo
package com.heima.test; public class Test3 { public static void main(String[] args) { //统计不同类型的字符个数 demo(); } private static void demo() { String str="adhuiaADADF561090(*&%$%^&5"; int a1=0; int A1=0; int shuzi1=0; int fuhao1=0; for(int i=0;i<str.length();i++){ char u=str.charAt(i); if(u>='a'&&u<='z'){ a1++; }else if(u>='A'&&u<='Z'){ A1++; }else if(u>='0'&&u<='9'){ shuzi1++; }else{ fuhao1++; } } System.out.println(a1); System.out.println(A1); System.out.println(shuzi1); System.out.println(fuhao1); } }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
扫描二维码关注公众号,回复:
1004798 查看本文章
转换大小写demo
package com.heima.test; public class Test4 { public static void main(String[] args) { demo();//把字符串首字母转换成大写,其余转换成小写 } private static void demo() { String str="dsahHKH"; String s1=str.substring(0, 1); s1=s1.toUpperCase(); String s2=str.substring(1); s2=s2.toLowerCase(); str=s1.concat(s2); System.out.println(str); } }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
把数组转换成字符串
package com.heima.test; public class Test5 { //把数组转换成字符串 /* * 分析: * 需要定义以一个字符串 * 遍历数组获取每个元素 * 用字符串于数组进行拼接 * */ public static void main(String[] args) { int[] arr={11,22,33,44}; String s="["; for(int i=0;i<arr.length;i++){ if(i<=arr.length-2){ s=s+arr[i]+", "; }else{ s=s+arr[i]+"]"; } } System.out.println(s); } }