String方法
字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串
相关方法如下:
方法 | 功能 |
String[ ] split(String regex)//以regex分割 | 将字符串根据regex全部拆分 |
String[ ] split(String regex, int limit) | 将字符串以指定的格式,拆分为limit组 |
代码示例:实现字符串的拆分处理
public static void main(String[] args) {
String str = "hello world hello world";
//全部拆分
String[] result1 = str.split(" ");
for(String s : result1) {
System.out.print(s);
}
System.out.println();
//部分拆分
String[] result2 = str.split(" ", 2);
for(String s : result2) {
System.out.print(s);
}
}
拆分是特别常用的操作,一定要重点掌握。另外有些特殊字符作为分割符可能无法正确切分,需要加上转义。
举个例子:比如拆分IP地址
public static void main(String[] args) {
String str = "192.168.1.1";
String[] result = str.split("\\.");
for(String s : result) {
System.out.println(s);
}
}
运行结果如下:
注意事项:
1.字符"|","*","+"都得加上转义字符,前面加上"\\"
2.而如果是"\\",那么就得写成"\\\\"
3.如果一个字符串中有多个分割符,可以用"|"作为连字符
举个例子吧:多次拆分
public static void main(String[] args) {
String str = "name=zhangsan&age=18";
//第一种多次拆分的方法
String[] result1 = str.split("&|=");
for(String s : result1) {
System.out.println(s);
}
System.out.println("=================");
//第二种多次拆分的方法
String[] result2 = str.split("&");
for(String s : result2) {
String[] temp = s.split("=");
System.out.println(temp[0] + "\n" + temp[1]);
}
}
运行结果如下:
字符串的截取
从一个完整的字符串中截取出部分内容。可用方法如下:
方法 | 功能 |
String substring(int beginIndex) | 从指定索引截取到结尾 |
String substring(int beginIndex, int endIndex) | 截取部分内容 |
举个例子:
public static void main(String[] args) {
String str = "helloworld";
System.out.println(str.substring(5));
System.out.println(str.substring(0,5));
}
运行结果如下:
注意事项:
1.索引从零开始
2.注意前闭后开区间的写法,substring(0,5)表示包含0号下标的字符,不包含5号下标
其他操作方法
方法 | 功能 |
String trim() | 去掉字符串的左右空格,保留中间空格 |
String toUpperCase() | 字符串转大写 |
String toLowerCase() | 字符串转小写 |
代码示例:观察trim方法的使用
public static void main(String[] args) {
String str = " hello world ";
System.out.println("[" + str + "]");
System.out.println("[" + str.trim() + "]");
}
trim方法会去掉字符串开头和结尾的空白字符(空格,换行,制表符等)
字符串的不可变性
String是一种不可变对象。字符串中的内容是不可改变。字符串不可被修改,是因为:
1.String类设计时就是不可改变的,String 类实现描述中就已经说明了:
(1)String类中的字符实际保存在内部维护的value字符数组中。
(2)String类被final修饰,表明该类不可以被继承。
(3)value被final修饰,表明value自身的值不可改变,既不能引用其他的字符数组,但是引用空间的内容可以改变
2.所有涉及到可能修改字符串的操作都是创建一个新的对象,改变的是新对象
比如replace方法:它是创建了一个新的字符数组,然后修改的是这个新的数组(对象)
了解:为什么String要设计成不可变的(不可变对象的好处是什么?)
1.方便实现字符串对象池,如果String可变,那么对象池就需要考虑写时拷贝的问题了
2.不可变对象是线程安全的
3.不可变对象更方便缓存hash code,作为key时可以更高效的保存到HashMap中