java的String类有split方法和contains方法:
public String[] split(String regex) {
return split(regex, 0);
}
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1;
}
有些代码需要对于特殊的字符串进行处理,比如包含竖线的字符串: "上海|hsanghai" ;
split和contains方法在处理时,会有点不同:
1. 使用split分割方法时,对于竖线|,需要转义下再分割,否则就当做字符串不存在的字符,相当于"",全部分割成字符了;
2. 使用contains时,不可使用转义字符;
package com.zsw.demo20210630;
import com.alibaba.fastjson.JSON;
import org.junit.jupiter.api.Test;
public class ContainsAndSplitTest {
// 分隔测试
@Test
public void splitTest() {
// 直接使用 竖线 分割,结果: ["D","7","0","2","|","S","h","a","n","g","H","a","i","|","B","e","i","J","i","n","g"]
String key = "D702|ShangHai|BeiJing";
String[] result = key.split("|");
// 21
System.out.println("length: " + result.length);
System.out.println("接使用 竖线 分割, 不是想要的结果,而是分成了所有的单个字符: " + JSON.toJSON(result));
// 使用 转义符竖线 分割,结果: ["D702","ShangHai","BeiJing"]
result = key.split("\\|");
// 3
System.out.println("length: " + result.length);
System.out.println("使用 转义符竖线 分割: " + JSON.toJSON(result));
}
// 包含测试
@Test
public void containsTest() {
// 直接使用竖线分隔,结果: ["D","7","0","2","|","S","h","a","n","g","H","a","i","|","B","e","i","J","i","n","g"]
String key = "D702|ShangHai|BeiJing";
// 直接判断字符串是否包含 竖线 : true
boolean result = key.contains("|");
System.out.println("直接判断字符串是否包含 竖线 : " + result);
// 判断字符串是否包含 转义符竖线 : false
result = key.contains("\\|");
System.out.println("判断字符串是否包含 转义符竖线: " + result);
}
}
3. 对于split处理.和*以及右划线时,也要使用使用转义字符:
// 分隔测试
@Test
public void splitTest2() {
String[] result = "D702*ShangHai".split("\\*");
//["D702","ShangHai"]
System.out.println("result: " + JSON.toJSON(result));
result = "D702.ShangHai".split("\\.");
// ["D702","ShangHai"]
System.out.println("result: " + JSON.toJSON(result));
String key = String.format("%s\\%s", "上海", "北京");
// 上海\北京
System.out.println("key: " + key);
result = key.split("\\\\");
// ["上海","北京"]
System.out.println("result: " + JSON.toJSON(result));
}