每日一例 | 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 -