概述:
String类是在Lang包下,Lang包属于核心包,不需要导包。
在Java中,所有的双引号内容都是String这个类的对象。
所以可以通过两种途径创建对方,双引号和new关键字。
对象存在方式:
字符串创建之后不可改变,但可以共享相同内容(常量池)。
双引号对象在字符串常量池中,只有一个相同对象存在,可以多个变量指向相同对象。
new关键字在堆内存中创建新对象,每new一次将创建一次新对象。
字符串+操作:
变量+双引号常量对象,系统底层会调用StringBuilder方法实现,完成拼接后再转为String,拼接后的对象实际在堆内存中;
String a ="abc"; String b =new String("a"); String d =b+"bc"; System.out.println(d == a); //结果false
字符串常量对象拼接,存在常量优化机制,仍在常量池中。
String a ="abc"; String b ="a"; String c = b+"bc"; System.out.println(d == a); //结果true
常用方法:
equals("比较字符串"):比较字符串的内容是否相同,布尔结果;
equalsIgnoreCase ("比较字符串"):比较字符串的内容是否相同(忽略大小写),布尔结果;
charAt(索引):根据索引获取对应位置的字符,int结果;
toCharArray():.将字符串转成字符数组,返回字符数组;
substring(索引):截取字符串,留头不留尾,返回字符串;
replace(旧值,新值):字符串的敏感词替换,返回字符串;
split("切割内容"):切割会丢失被切割的字符信息,返回字符串数组;
indexOf(字符串):查找指定字符串在此字符串中的索引,第一次出现;
indexOf(字符串,索引):指定的索引处开始查找,,第一次出现。
注意:
字符串对象创建之后不能更改。
运算后产生的新字符串必须使用变量接收后才能看到效果。
方法的实现:
遍历字符串:
实现方法1:
String a ="123asd"; //使用length方法获取长度,遍历每个位置 for (int i = 0; i < a.length(); i++) { //caarAt方法接收并打印。 System.out.print(a.charAt(i)+","); }
实现方法2:
String a ="123asd"; //转为字符数组 char[] chars = a.toCharArray(); //数组遍历 for (int i = 0; i < chars.length; i++) { System.out.print(chars[i]+","); }
一般推荐使用第二种方法遍历。
比较字符串内容 :
String a1 =new String("abc") ; //new关键字创建的小写字母对象 String a2 = "Abc"; //大写字母对象 String a3 = "abc"; //小写字母对象 //内容比较结果 System.out.println(a1.equals(a2)); //false System.out.println(a1.equals(a3)); //true //忽略大小写比较的结果 System.out.println(a1.equalsIgnoreCase(a2)); //true System.out.println(a1.equalsIgnoreCase(a3)); //true
字符串中字符统计:
String a = "12345asdAS"; //转为字符数组 char[] chars = a.toCharArray(); //定义统计变量 int bigCount =0,smallCount =0,numCount=0; //数组遍历 for (int i = 0; i < chars.length; i++) { char c = chars[i]; //判断该字符的数值范围可以得到类型 //注意数字的字符取值不是0-9 if (c >= '0' && c <= '9') { numCount++; }else if (c >= 'a' && c <= 'z') { smallCount++; }else if (c >= 'A' && c <= 'Z') { bigCount++; } } //打印结果 System.out.println("数字为"+numCount+"个"); System.out.println("小写字母为"+smallCount+"个"); System.out.println("大写字母为"+bigCount+"个");
字符串截取:
String a = "12345asdAS"; //截取字符串,注意索引位置留头不留尾 String a1 = a.substring(3); String a2 = a.substring(0, 3); System.out.println(a1); //45asdAS System.out.println(a2); //123
字符串敏感词替换 :
String a = "12345asdAS"; //替换字符串需要使用变量接收 String a1 = a.replace("asd", "***"); System.out.println(a1); //12345***AS
字符串切割替换 :
String a = "1,2,3,4,5"; //切割后的字符串为数组类型 String[] a1 = a.split(","); //遍历打印 for (int i = 0; i < a1.length; i++) { //我们加上*方便查看 System.out.print(a1[i]+"*"); //1*2*3*4*5* }