天天看點

關于String的split方法和contains方法的使用:豎劃線 |

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