每日一例 | String那些事

前言
String是一个特别基础的类,更是我们离不开的一个类,可以说在所有项目中,不可能不用String,所以我们今天就来看下String的一些知识点,看下你到底掌握了没有。我们废话少说,直接开始。
String
不可变类
我们在第一次学习String的时候,就被告知String是不可变的类,不可以被继承。具体的原因就是String类是final修饰的:

当然,String字符串创建后,不能变化也是因为final关键字,看上图,我们发现value前面也有final,而且是私有的,没有对外提供可访问的方法,所以String的value只能被赋值一次。
如果你要继承String,他会有这样的提示错误:

意思就是无法继承final的类。
常用的方法
作为一个最常用的类之一,String有着特别丰富的方法,以满足我们各种需求:
| 方法 | 参数 | 应用 | 
|---|---|---|
| length() | 返回字符串长度 | |
| charAt() | int索引 | 获取string中索引对的的char | 
| getChars(),getBytes() | 要复制部分的起点和终点,复制的目标数组,目标的起始索引 | 复制char或byte到目标数组中 | 
| toCharArray() | 生成一个char[],包含string的所有字符 | 
方法比较多,时间关系,我们先写这个,等晚上了,我把其他也补充上。
格式化输出
这一块其实我以前也很少有,但是最近了解了下,发现还是方便的。以前输出字符串我们是这也操作的:
int x = 0, y = 2;
System.out.print("Row 1 :" + x + ","+ y);
但是在jdk1.5以后,我们可以这样输出了:
System.out.printf("Row 1 :%d, %d", x, y);
或者这样:
System.out.format("Row 1 :%d, %d", x, y);
上面,这些写法输出结果都是一样的:

对于prinf和format想要换行,直接在字符串后面加上换行符即可(\n)
format方法
这里我们着重说下format方法。她也是jdk1.5引入的,她可以满足你的各种字符串拼接需求,特别方便:
String format = String.format("x = %d, y = %d, x + y = %d", x, y, x + y);
System.out.println(format);
结果:
x = 0, y = 2, x + y = 2
下面是format支持的参数类型:
| 参数 | 说明 | 
|---|---|
| d | 整数(十进制) | 
| c | Unicode字符 | 
| b | Boolean值 | 
| s | String | 
| f | 浮点数(十进制) | 
| e | 浮点数(科学计数) | 
| x | 整数(十六进制) | 
| h | 散列码(十六进制) | 
| % | 字符"%" | 
通过% + 上面这些参数,你可以实现各种字符串拼接的需求。
当然,我们也可以通过Formatter实现各种字符串的拼接,因为format方法本身就是通过formatter实现的:

正则表达式
正则表达式也算是比较重要,而且用的比较多的知识了,由于内容太多了,这里我们就简单说下的的应用。一般我们会用它来实现参数的校验,比如日期格式校验、金额格式校验、手机号校验、身份证号校验。
String str = "2021-05-20";
String pattern = "^\\d\\d\\d\\d-\\d\\d-\\d\\d";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
上面的代码,只有是2021-05-20这样的格式才会被匹配,结果为true,否则是false。下面这些都是不匹配的:
2021-5-20
2021-5-200
2021-05-200
2021-005-20
当然,2021-05-00、2021-00-20、2020-00-00、0000-00-00也是可以匹配的,但他们对java而言是合法的日期格式:
System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
第一个对应的日期是
Fri Apr 30 00:00:00 CST 2021
也就是2021-04-30
第二个对应的日期是
Sun Dec 20 00:00:00 CST 2020
也就是2020-12-20
第三个对应的日期是
Mon Nov 30 00:00:00 CST 2020
也就是2020-11-30
第四个对应的日期是
Mon Nov 30 00:00:00 CST 2020
也就是0002-11-30
其他的正则表达式,感兴趣的小伙伴自己去了解,在实际开发过程中,数据校验用起来很方便,比如excel导入的数据。
当然,正则这块还有一个比较强大的功能,就是数据替换,由于时间问题,我们就不在讲了,感兴趣的小伙伴自己去了解。
总结
对于String常用的方法,小伙伴肯定都比较熟悉,但是format和正则表达式这块平时用到开发中的小伙伴肯定比较少,我们希望在今天分享之后,大家能把这两个比较强大,而且用起来很方便的知识点,真正用到实际开发中,它们一定会极大提升你的开发效率的,让我们一起加油努力吧,奥里给
!
项目路径:
https://github.com/Syske/example-everyday
本项目会每日更新,让我们一起学习,一起进步,遇见更好的自己,加油呀
- END -