java中的string分析
Object 类 顶级
toString()方法
一般都要重写
返回对象文本描述
被很多API调用
==
比较变量的值,引用变量的值是地址值,引用变量==比较的是地址值
不能用于比较逻辑上对象是否相等
equals 方法
一般要重写(重写时也要重写 hashCode方法)
Object的equals 方法用于对象的相等 逻辑
instanceof java的运算符
测试一个对象是否是一个类的实例
A instanceof B
对象A是否是类型B的实例 返回boolean
String 类 重要类
final类
有很多的优化
底层就是:字符数组
字符串是有字符数组组成的。
字符串对象不可改变
字符串引用是可以重新赋值
字符串的连接底层是字符数组复制实现的
String API
API方法不会改变原字符串对象
返回值与原有字符串不同时候是新对象
返回值与原有字符串一样的时候还是引用之前的对象
为了性能
常量池(提高性能)
静态字符串(字面量/常量/常量连接的结果)在静态池中创建,很多java教程里面都讲了这个尽量使用同一个对象
重用静态字符串
String toLowerCase() 返回字符串小写形式
toUpperCase() 返回字符串大写形式
trim() 返回字符串为原始字符串去掉前后的空白
(空格 \t \n \r)
endsWith("str") 字符串结尾是否有str
startsWith("str") 字符串开头是否有str
length() 返回字符串的长度
indexOf() 有重载 字符串中查找别一个字符串
substring() 截取字符串中的一部分
indexOf()和substring() 配合使用可以截取特定的字符串
package day022; public class Demo01 { public static void main(String[] args){ String s1 = "Hello"; String s2 = s1; s1 = s1 + "World"; System.out.println(s1); System.out.println(s2); System.out.println(s1.toLowerCase()); } }
package day22;大写转小写,小写转大写 import java.util.Arrays; public class Demo02 { public static void main(String[] args) { char[] chs = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!' }; char[] chs1 = Arrays.copyOf(chs, chs.length); for (char c : chs) { if (c > 64 && c < 91) { c = (char) (c + 32); } System.out.print(c); } for (char c : chs) { if (c > 'a' && c < 'z') { c = (char) (c - 32); } System.out.print(c); } } }
package day22;// 大写转小写同时小写转大写 import java.util.Arrays; public class Demo03 { public static void main(String[] args){ char[] chs = {'H','e','l','l','o',' ','W','o','r','l','d','!'}; char[] chs1 = Arrays.copyOf(chs, chs.length); for(char c:chs){ if(c>64 && c<91){ c = (char) (c + 32); System.out.print(c); continue; }else if(c>'a' && c<'z'){ c = (char) (c - 32); } System.out.print(c); } } }
package day22;//字符串去掉前后的空白 public class Demo04 { public static void main(String[] args){ String name = " \n lmd tx \t \r "; System.out.println(name.trim()); } }
package day22; public class Demo05 { public static void main(String[] args){ String name = " \n lmd tx \t \r "; System.out.println(name.trim()); String file = "p.png"; boolean isPng = file.endsWith(".png");//字符串结尾是否有.png System.out.println(isPng); boolean isP = file.startsWith("p");//字符串开头是否有p System.out.println(isP); } }
package day22; public class Demo06 { public static void main(String[] args){ String str = "asdfzcvqewrfgHHajlsdjf"; int index = str.indexOf("HH");//找到返回序号 System.out.println(index); index = str.indexOf("GG");//找不到返回-1 System.out.println(index); index = str.indexOf('a');//从头开始 System.out.println(index); index = str.indexOf('a', 13);//从指定位置开始找 System.out.println(index); System.out.println(str.substring(4,6));// 截取字符串中的一部分 } }
package day22; public class Demo07 {//特殊截取 public static void main(String[] args){ String email ="81240805@qq.com"; String QQ = email.substring(0,email.indexOf("@"));//从邮箱中截取QQ号 System.out.println(QQ); String domain = email.substring(email.indexOf("@")+1);//从邮箱中截取域名 System.out.println(domain); } }
package day22; public class Demo08 {//条码应用 EAN-13 public static void main(String[] args){ String str = "6922711076348"; System.out.println(str); char c1; char c2; int n=0; int m=0; for(int i = 0;i <str.length()-1;i+=2){ c1 = str.charAt(i); n = n +c1-'0'; System.out.print(c1); } System.out.println(); for(int i = 1;i <str.length()-1;i+=2){ c2 = str.charAt(i); System.out.print(c2); m = m +c2-'0'; } System.out.println(); System.out.println(n); System.out.println(m); int sum = n + m*3; System.out.println(sum); int q =(10-sum%10)%10; if(q == 0){ System.out.println(0); }else{ System.out.println(q); } } }