天天看点

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