java中的String类常用方法解析(一)

Java中的String作为一个常用类,提供了一大堆实用的方法。对于那些个熟悉的,平常用的时候自然是信手拈来,不熟悉的你懂滴度娘,事后也没怎么研究过。趁着中午没事儿干今天研究个明天研究个,好好琢磨琢磨并记录下来,以后用的时候且不说会不会用至少不用再问度娘了。好啦,废话说到这,言归正传。

1、substring(int beginIndex):截取字符串

解析:返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引(beginIndex)处的字符开始,直到此字符串末尾。

格式:public String substring(int beginIndex)

参数

beginIndex - 起始索引(包括)。
返回:指定的子字符串。

抛出异常
IndexOutOfBoundsException - 如果 beginIndex 为负或大于此 String 对象的长度。
实例

String subStr="123456789";
//示例1、正常情况:由下面两个例子可以发现下标是从1而不是0开始的
System.out.println(subStr.substring(0));//输出:123456789
System.out.println(subStr.substring(1));//输出:23456789
System.out.println(subStr.substring(subStr.length()));//输出空符串

//示例2、字符超长(直接报错)
System.out.println(subStr.substring(subStr.length()+1));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: -1

//示例3、输入负数(直接报错,可我怎么听说是反着截取出来的呢,难道是我张冠李戴了?)
System.out.println(subStr.substring(-5));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: -5

拓展: 对于这个只有一个参数的substring方法,我常用的就是在“需要添加固定后缀或前缀”的时候用,具体怎么用我的这篇里面写的比较清楚:拼接字符串时使用substring方法进行截取避免每次都判断。有需要的可以看看。

2、substring(int beginIndex):截取字符串

解析:返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。

格式:public String substring(int beginIndex,int endIndex)

参数

beginIndex - 起始索引(包括)。
endIndex - 结束索引(不包括)。
返回:指定的子字符串。

抛出异常
IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex。
实例

String subStr="123456789";

//示例1、正常截取:由下面两个例子可以发现下标是从1而不是0开始的
System.out.println(subStr.substring(0, 5));//输出:12345
System.out.println(subStr.substring(1, 5));//输出:2345

System.out.println(subStr.substring(1, subStr.length()));//23456789

//示例2、字符超长(直接报错)
System.out.println(subStr.substring(1,subStr.length()+1));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: 10
System.out.println(subStr.substring(20,subStr.length()));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: -11
System.out.println(subStr.substring(20,subStr.length()+1));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: 10

//示例3、输入负数
System.out.println(subStr.substring(-5,subStr.length()));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: -5
System.out.println(subStr.substring(1,-5));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: -6
System.out.println(subStr.substring(-10,-10));
//报错:java.lang.StringIndexOutOfBoundsException: String index out of range: -10

3、split(String regex):根据给定正则表达式的匹配拆分此字符串

解析:该方法的作用就像是使用给定的表达式和限制参数 0 来调用两个参数的 split 方法。因此,所得数组中不包括结尾空字符串。

格式:public String[] split(String regex)

参数

regex - 定界正则表达式 
返回:字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的

抛出异常
PatternSyntaxException - 如果正则表达式的语法无效
实例

//示例1、进行截取的字符串为空
String str="";
String[] split1 = str.split(";");
System.out.println(split1.length);//输出:1
System.out.println(split1);//输出:[Ljava.lang.String;@1befab0
for(String s:split1){
	System.out.println(s);//输出:[空字符串]
}

//示例2、不给定分隔符
String str2="123456789";
String[] split2 = str2.split(";");
System.out.println(split2.length);//输出:1
System.out.println(split2);//输出:[Ljava.lang.String;@1befab0
for(String s:split2){
	System.out.println(s);//输出:123456789
}
//从示例1和示例2的输出结果可以看出:分割之后得到的数组长度至少为1,且不管给定的字符串是否有值、是否给定分隔符。
//且数组的值就是给定的字符串全部数据。

//示例3、给定的分隔符不规则
String str3 ="123;456;789";
String[] split3 = str3.split(";");
System.out.println(split3.length);//输出:3
System.out.println(split3);//输出:[Ljava.lang.String;@c2ea3f
for(String s:split3){
	System.out.println(s);//输出:123 456 789
}

//示例4、给定的分隔符规则
String str4 ="123;456;789;";
String[] split4 = str4.split(";");
System.out.println(split4.length);//输出:3
System.out.println(split4);//输出:[Ljava.lang.String;@c2ea3f
for(String s:split4){
	System.out.println(s);//输出:123 456 789
}
//从示例3和示例4的输出结果可以看出:字符串的末尾不管是否以给定的分隔符结尾,对结果都没有影响

//示例5、多个分隔符
String str5 ="123;;;456;789;";
String[] split5 = str5.split(";");
System.out.println(split5.length);//输出:5
System.out.println(split5);//输出:[Ljava.lang.String;@c2ea3f
for(String s:split5){
	System.out.println(s);//输出:123 [空字符串] 456 789
}
//从结果看:字符串中间多个连续的分隔符之间的nothing算作一个空字符串

//示例6、多个分隔符
String str6 ="123;456;789;;;";
String[] split6 = str6.split(";");
System.out.println(split6.length);//输出:3
System.out.println(split6);//输出:[Ljava.lang.String;@c2ea3f
for(String s:split6){
	System.out.println(s);//输出:123 456 789
}
//从结果看:字符串末尾多个连续的分隔符之间的nothing不算作一个空字符串

//示例7、多个分隔符
String str7 ="123;456;789;; ;;";
String[] split7 = str7.split(";");
System.out.println(split7.length);//输出:5
System.out.println(split7);//输出:[Ljava.lang.String;@c2ea3f
for(String s:split7){
	System.out.println(s);//输出:123 456 789 [空字符串] [空字符串]
}
//从示例5到示例7的结果可以看出:字符串中间多个连续的分隔符之间的nothing算作一个空字符串;
//字符串末尾多个连续的分隔符之间的nothing不算作一个空字符串

 总结

a、分割之后得到的数组长度至少为1,且不管给定的字符串是否有值、是否给定分隔符,且数组的值就是给定的字符串全部数据。

b、字符串的末尾不管是否以给定的分隔符结尾,对结果都没有影响。

c、字符串中间多个连续的分隔符之间的nothing算作一个空字符串;字符串末尾多个连续的分隔符之间的nothing不算作一个空字符串

d、通过split方法分割之后的字符串其分隔符将不再在当前字符串中,譬如:用123@456@789@这个字符串进行分割,得到结果只有123456789,三个@符号没有了。这点需要着重注意。有次在应用中就因为split的这个特性走了好多弯路。

猜你喜欢

转载自1017401036.iteye.com/blog/2254375