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中