本文将从字符串的截取,分割,替换,拼接和检索五个方面对比Java和JavaScript中字符串的常用操作。
字符串截取
- 1、
str.substring(startIndex,endIndex)
:在Java和JS中的使用相同, 不接受负的参数
String str = "http://localhost:9000/dd50d617-78ff-4acc-b185-892c43f98bec.png";
System.out.println("截取下标在0~21之间的字符,不包括下标为21的(共21个字符):"+str.substring(0,21)); //http://localhost:9000
System.out.println("截取下标为21之后的所有字符,包括下标为21的字符:"+str.substring(21)); // /dd50d617-78ff-4acc-b185-892c43f98bec.png
let str = "http://localhost:9000/dd50d617-78ff-4acc-b185-892c43f98bec.png"
console.log("截取下标在0~21之间的字符,不包括下标为21的(共21个字符):",str.substring(0,21))
console.log("截取下标为21之后的所有字符,包括下标为21的字符:",str.substring(21))
- 2、
str.substr(startIndex,length)
:参数为开始位置下标和要截取长度,startIndex 可为负数,length 可选,JS中的方法,Java中无该方法,不建议使用;
console.log(str.substr("截取下标为3之后的所有字符,包括下标为3的字符:",3))
console.log(str.substr("截取下标为3之后的5个字符,包括下标为3的字符:",3,5)) // p://l
console.log(str.substr("截取倒数三个字符:",-3)) // png
- 3、
str.slice(startIndex,endIndex)
:和 substring 用法一样,但 slice 两个参数都可以是负数;同样是JS中的方法,Java中无该方法;特点:“包前不包后”,左开区间【);方向只能向右,即endIndex必须大于startIndex;
console.log("截取下标在0~21之间的字符,不包括下标为21的(共21个字符):",str.slice(0,21))
console.log("截取下标为21之后的所有字符,包括下标为21的字符:",str.slice(21))
console.log("截取下标在0~倒数第二个之间的所有字符,不包括倒数第二个字符:",str.slice(0,-2))//输出:http://localhost:9000/dd50d617-78ff-4acc-b185-892c43f98bec.p
console.log("截取下标在倒数第五个~倒数第二个之间的所有字符,不包括倒数第二个字符:",str.slice(-5,-2))//c.p
字符串分割
split() 方法
用于把一个字符串分割成一个字符串数组。在Java和JS中的用法相同。
String str = "Hello Spring Boot,Spring Cloud,Spring Data";
// 以英文,逗号分割字符串
String[] array = str.split(",");
System.out.println(Arrays.toString(array));//[Hello Spring Boot, Spring Cloud, Spring Data]
// 以英文空格分割字符串
String[] array2 = str.split(" ");
for (String item : array) {
System.out.println(item);
}
//输出:
Hello
Spring
Boot,Spring
Cloud,Spring
Data
字符串替换
replace(target,newstring)
方法将一个字符串中的子串,替换为新的字符串,或替换一个与正则表达式匹配的子串,在Java和JS中的用法相同。
String str = "http://localhost:9000/dd50d617-78ff-4acc-b185-892c43f98bec.png";
String replace = str.replace("http", "https");
System.out.println(replace);//https://localhost:9000/dd50d617-78ff-4acc-b185-892c43f98bec.png
// 正则
[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符
[^a-z] // 除了小写字母以外的所有字符
[^\\\/\^] // 除了(\)(/)(^)之外的所有字符
[^\"\'] // 除了双引号(")和单引号(')之外的所有字符
手机号:^1[34578]\d{9}$
邮箱:^\w+@\w+(\.\w+)+$
字符串拼接
参考w3school: https://www.w3school.com.cn/jsref/jsref_join.asp
1、join() 方法
:JS中的join方法将数组中的所有元素拼接成一个字符串。Java中的Join方法用来处理多线程问题;
-
语法:
arrayObject.join(separator)
:separator指定要使用的分隔符,separator可选。如果省略该参数,则默认使用逗号作为分隔符。 -
返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。
let arr = [ "a", "b", "c", "1", "2" ]
console.log(arr.join()) //a,b,c,1,2 默认以逗号拼接每个数组元素
console.log(arr.join("-")) //a-b-c-1-2 以-号拼接每个元素
console.log(arr.join(""))//abc12 空拼接符
2、在JS和Java中都有concat()
方法,并且他们的用法不相同。
在JS中,concat() 方法用于拼接两个或多个数组。
- 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
- 语法:arrayObject.concat(arrayX,arrayX,…,arrayX),arrayX必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。
let arr = [1,2,3]
console.log(arr.concat(4,"遇见"))//[1,2,3,4,"遇见"] 将4和"遇见"拼接到数组末尾
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
var arr2 = new Array(3)
arr2[0] = "James"
arr2[1] = "Adrew"
arr2[2] = "Martin"
//将arr2数组拼接到arr数组后
console.log(arr.concat(arr2)) // [George,John,Thomas,James,Adrew,Martin]
参考w3school: https://www.w3school.com.cn/js/jsref_concat_array.asp
在Java中,concat()
用于拼接两个字符串;与+号的区别主要是:+号可以拼接字符串或者数字及其他基本类型数据,而concat只能拼接字符串。
String s1 = "遇见";
String s2 = "0和1";
String concat = s1.concat(s2);
System.out.println(concat);//遇见0和1
字符串检索
1、match() 方法
可在字符串内检索指定的值,或匹配到一个或多个正则表达式。返回一个存放匹配结果的数组。
let str="Hello 0和1!"
console.log(str.match("Hello"))// 检索字符串中是否包含Hello
console.log(str.match(/\d+/g)) // ["0", "1"] 匹配正则(返回字符串中的所有数字)
在Java中没有match() 方法,但Java中有 matches()
方法和match()类似
- 语法:
public boolean matches(String regex)
,在字符串匹配给定的正则表达式时,返回 true。
// 判断字符串 str 是否符合邮箱格式
String str = "lingstudy@qq.com" ;
if (!str.matches("^\\w+@\\w+(\\.\\w+)+$")){
return false; // 邮箱格式不正确
}
return true;
2、indexOf()
方法可返回某个指定的字符串值在字符串中首次出现的位置(下标)。如果没有找到匹配的字符串则返回 -1。indexOf()在 Java和JS中的用法相同。
语法:string.indexOf(searchvalue,start)
,start参数可选。
var str="Hello 和 0和1!"
console.log(str.indexOf("和")) //返回 和 第一次出现的位置 6
console.log(str.indexOf("和",7))//在字符串第7个位置开始查找字符 "和" 第一次出现的位置: 9
String str = "遇见 和 0和1";
System.out.println(str.indexOf("我"));// -1
System.out.println(str.indexOf("和"));// 3
System.out.println(str.indexOf("和",4));// 6
删除头尾空白符
trim() 方法
用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符,在Java和JS中的用法相同。
String str = " \thttp://localh8bec.png\n ";
System.out.println(str.trim()); //http://localh8bec.png
let str = " \thttp://localh8bec.png\n "
console.log(str.trim())