本文主要探究javascript和java对字符串的一些常用操作的异同点。
1.截取字符串
javascript:提供两种方法截取字符串:
substr(Number start , Number length):需要传入两个参数,第一个参数是截取字符串的起始索引,第二个参数是要截取的字符串的长度,注意是长度,长度,长度,首次用的时候被坑的好惨:
substring(Number start , Number end):也需要传入两个参数,第一个参数是截取字符串的开始索引,第二个参数是截取字符串的结束索引。这个方法比较正常,效果等同于java中的String类型的对象方法public String substring(int beginIndex, int endIndex) :
javascript提供的这两个方法,名字不同,而java提供的截取字符串的方法方法名是同一个,是两个重载的方法:
substring(int beginIndex):传入一个参数,表示截取此索引及之后的字符串;
substring(int beginIndex , int endIndex):传入两个参数,一个开始索引,一个结束索引,表示截取两个索引之间的字符串,不包含结束索引处的字符
public static void main(String[] args) {
String str = "2016081911";
System.out.println(str.substring(2));//打印出16081911
System.out.println(str.substring(2, 4));//打印出16
}
值得注意的是,substring是一个单词(意思是子字符串),所以javascript和java提供的substring()方法第二个s没有大写就理所应当了。
2.split成数组
javascript和java分割字符串的方法名是一样的,都是split(),里面传一个字符串参数,但是针对相同的字符串,分割出来的字符串可能不一样:
以常用的逗号分割举例:
如果字符串是正常的字符串,则分割出来的效果一样,字符串数组长度一样,对应索引处的值一样:
javascript :
javascript分割字符串,只要字符串有多余的分隔符,不管是在开头、中间还是在结尾,得到的数组的长度都会比分割正常字符串得到的数组的长度大,有几个多余的分割符,数组的长度就会大几,多出来的索引对应的值是空字符串。
java:
public static void main(String[] args) {
// 正常字符串
String str = "a,b,c";
String[] strArr = str.split(",");
System.out.println(strArr.length);//打印出3
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);//依次打印a b c
}
// 以逗号开头的字符串
str = ",a,b,c";
strArr = str.split(",");
System.out.println(strArr.length);//打印出4
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);//依次打印空字符串 a b c
}
// 以逗号结尾的字符串
str = "a,b,c,";
strArr = str.split(",");
System.out.println(strArr.length);//打印出3
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);//依次打印a b c
}
}
java分割字符串同javascrript分割字符串大同小异。唯一的一点区别是,如果多余的分隔符在尾部,则分割此字符串得到的数组同分割正常字符串得到的数组一样,长度一样,内容一样。如果多余的分隔符在开头或是中间,则会比分割正常字符串得到的数组的长度大,多出来的索引对应的值也是空字符串。
因为在实际开发中前端页面向后端发请求时提交的参数的值很可能是用逗号拼出来的,如果拼的不规范的话,很可能后端分割后的数组和想象中的会不一样,所以建议是:最好页面向后端提交时,请求参数的值要去掉首尾逗号(分隔符),后端给前端的返回值也要去掉首尾逗号(分隔符),这样就能保持前端和后端分割得到的数组长度一致了。
public static void main(String[] args) {
String userInfo = ":";
String[] o = userInfo.split(":", 2);
System.out.println(o.length);
for (String str : o) {
System.out.println(str);
}
userInfo = "/g";
String[] pathSplit = userInfo.split("/", 2);
for (String str : pathSplit) {
System.out.println(str);
}
}