String类常识
后面的部分栗子基于这三个对象
String str1 = "You know, that's very funny!";
String str2 = "From Now On, I Will learn Java hardly,you know, That's must be!";
char[] fromChar = {'a', 'b', 'c'};
- 字符串的常量池:程序中直接用双引号的字符串,存放在字符串常量池中的,下面的same1,same2指向的地址一样,单例模式
String same1 = "abc";
String same2 = "abc";
String isSame = new String(fromChar);
System.out.println(same1 == same2); // true
System.out.println("?" + same1 == isSame); // false
- @构造方法
// 1.空内容
String newStr1 = new String();
// 2.传入一个字符数组
String newStr2 = new String(fromChar);
// 3.传入一个字节数组
byte[] byteChars = {45, 23, 15, 67, 76, 45, 99};
String newStr3 = new String(byteChars);
// 4.直接创建
String newStr = "newStr";
- 创建格式化字符串 静态方法, 下面的语句执行效果一致
- %nd :整型占位符,n代表总的占位(默认左边补上空格,右对齐,加上-号表示右对齐;当长度超过n,这个占位符将失去作用);
- %n.mf : 浮点数占位符,n代表总的占位数,m代表小数占位数(同上);
- %ns : 字符串占位数(同上)。
System.out.printf("int: %-5d\ndouble:%6.2f\nString:%10s",34,67.88,"hello men\n");
String fs = String.format("int :%10d\ndouble:%10.2f\nString:%10s",123,123.44234,"String");
- 制表符\t,比如打印九九乘法表,末尾加上\t会自动右对齐
一、比较相关的方法
- 比较内容是否全部相等,推荐:如果一个常量和对象进行比较建议 常量.equals(对象);原因:避免对象出现空指针异常(当对象出现指向为null)
boolean eq1 = "abc".equals(str2);
boolean eq2 = str1.equals(str2);
- 比较内容是否相等,忽略大小写,注意,只有英文支持大小写
boolean eq3 = str1.equalsIgnoreCase(str2);
- 比较大小,返回int类型的值,按照字典序进行比较,如果索引相同,如果有下一个索引继续比较(ascii值的大小)
String a = "ab";
String b = "aC";
int a1 = a.compareTo(b);
System.out.println(a1); // 31
- 判断是否已啥开头(结尾)
boolean end0 = "abc123ttr".startsWith("abc");
// 判断指定位置是否已啥开始
boolean end00 = "abc123ttr".startsWith("123", 3);
// 判断是否以此后缀结束
boolean end = "abc123ttr".endsWith("ttr");
- 判断是否符合正则表达式
boolean reg = "abc123".matches("\[abc\]{3}\[0-9\]*");
System.out.println("正则表达式判断:" + reg); // true
二、获取功能相关的方法
- 获取字符串长度
int len2 = "abc".length();
- 返回索引处的char值
char char1 = str1.charAt(5);
- 连接两个字符串
String con = str1.concat(str2);
- 通过 + 连接两个字符串
String str3 = str1 + str2;
- 获取一个子串(字符)第一次出现的索引位置
int index = "abc".indexOf('b');
int index2 = "abc".indexOf("bc");
- 获取一个子串(字符)从索引位置开始第一次出现的索引位置
int index3 = "abcbc".indexOf('b', 2);
int index4 = "abcbc".indexOf("bc", 2);
- 获取一个子串(字符)最后一次出现的索引位置
int index5 = "abc".lastIndexOf('b');
int index6 = "abc".lastIndexOf("bc");
- 获取一个子串(字符)最后一次出现的索引位置,从指定的索引位置开始反向搜索
int index7 = "abcbc".lastIndexOf('b', 2);
int index8 = "abcbc".lastIndexOf("bc", 2);
三、转换功能相关的方法
- 拆分为字符数组
char[] charArr = "abc123".toCharArray();
- 返回平台默认编码对应的bytes数组
byte[] by = "abc".getBytes();
for(byte bb: by)
System.out.println("bb-> "+bb);
- 将所有子串转换为另一个子串(或者字符,但是得保证两个参数类型一直)
String re = "abc***1234**".replace("**", "@");
System.out.println("替换:" + re);
- 正则表达式匹配替换(正则表达式底层的算法与编译器实现的算法有异曲同工之妙)
String res = "abc123&&&&&&&jkhh&&&&".replaceAll("&+", "@");
System.out.println("正则表达式全部匹配替换:" + res);
- 正则表达式匹配替换第一个满足条件的子串
String res2 = "abc12232&^*(&%$#%8673%%&.".replaceFirst("[0-9]+", "替换了");
System.out.println("正则表达式匹配第一次" + res2);
四、分割功能的方法
- 从索引位置开始截取字符串
String sub1 = "abcd123456".substring(4);
- 截取一个区间的字符串,包左不包右(如果参数一样集,截取的为"")
String sub2 = "abc123456".substring(4,5);
System.out.println(sub2);
- 正则表达式进行拆分字符串
String regs0 = "黄老邪kdfje834-a8d欧阳锋ldfjda8d7f983*^%%!段智兴fkfasd)((000((洪七公+_++87787655王重阳";
String[] regs1 = regs0.split("[a-zA-Z0-9!@#$%^&*()_+-]+");
- 正则表达式分割,限制分割次数
String[] regs2 = regs0.split("[a-zA-Z0-9!@#$%^&*()_+-]+", 2);
- 小写转换,(可以传入指定规则 Locale 的实例)
String cha0 = "abc876ABHGd".toLowerCase();
- 大写转换,(可以传入指定规则 Locale 的实例)
String cha1 = "abc876ABHGd".toUpperCase();
-- 返回字符串的副本,忽略前导空白和尾部空白
String noSpace = " a bc d ".trim();
System.out.println(noSpace);