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));
}