string.split方法中的字符串分隔符

Vic*_*cky 42 java string split delimiter

我有以下数据:

1||1||Abdul-Jabbar||Karim||1996||1974
Run Code Online (Sandbox Code Playgroud)

我想划分令牌.

这里的分隔符是"||".

我的分隔符设置器是:

public void setDelimiter(String delimiter) {
    char[] c = delimiter.toCharArray();
    this.delimiter = "\"" + "\\" + c[0] + "\\" + c[1] + "\"";
    System.out.println("Delimiter string is: " + this.delimiter);
}
Run Code Online (Sandbox Code Playgroud)

然而,

String[] tokens = line.split(delimiter);
Run Code Online (Sandbox Code Playgroud)

没有给出所需的结果.

Ray*_*oal 56

没有必要像你所做的那样将它分解成碎片来设置分隔符.

这是一个可以编译和运行的完整程序:

import java.util.Arrays;
public class SplitExample {
    public static final String PLAYER = "1||1||Abdul-Jabbar||Karim||1996||1974";
    public static void main(String[] args) {
        String[] data = PLAYER.split("\\|\\|");
        System.out.println(Arrays.toString(data));
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要对模式使用拆分,可以使用Pattern.compilePattern.quote.

要查看compilequote实际操作,以下是使用所有三种方法的示例:

import java.util.Arrays;
import java.util.regex.Pattern;
public class SplitExample {
    public static final String PLAYER = "1||1||Abdul-Jabbar||Karim||1996||1974";
    public static void main(String[] args) {
        String[] data = PLAYER.split("\\|\\|");
        System.out.println(Arrays.toString(data));

        Pattern pattern = Pattern.compile("\\|\\|");
        data = pattern.split(PLAYER);
        System.out.println(Arrays.toString(data));

        pattern = Pattern.compile(Pattern.quote("||"));
        data = pattern.split(PLAYER);
        System.out.println(Arrays.toString(data));
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要使用相同的模式经常拆分,建议使用模式.BTW的输出是:

[1, 1, Abdul-Jabbar, Karim, 1996, 1974]
[1, 1, Abdul-Jabbar, Karim, 1996, 1974]
[1, 1, Abdul-Jabbar, Karim, 1996, 1974]
Run Code Online (Sandbox Code Playgroud)


San*_*rma 33

使用该Pattern#quote()方法进行转义||.尝试:

final String[] tokens = myString.split(Pattern.quote("||"));
Run Code Online (Sandbox Code Playgroud)

这是必需的,因为它|是一个交替字符,因此在传递给split调用时获得特殊含义(基本上,参数split是字符串形式的正则表达式).


Mar*_*ers 8

双引号在正则表达式中被解释为文字; 他们不是特殊的人物.您正在尝试匹配文字"||".

只需使用Pattern.quote(delimiter):

根据要求,这里有一行代码(与Sanjay相同)

final String[] tokens = line.split(Pattern.quote(delimiter));
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,则表示您没有传递正确的分隔符.


Yes*_*esh 6

String[] strArray= str.split(Pattern.quote("||"));
Run Code Online (Sandbox Code Playgroud)

哪里

  1. str ="1 || 1 || Abdul-Jabbar || Karim || 1996 || 1974";
  2. Pattern.quote("||")将忽略特殊字符.
  3. .split函数会在每次出现||时拆分字符串.
  4. strArray将包含由||分隔的字符串数组.


Nir*_*hah 5

管道(|)是正则表达式中的特殊字符.为了逃避它,你需要用反斜杠(\)作为前缀.但在java中,反斜杠也是一个转义字符.所以你需要用另一个反斜杠来逃避它.所以你的正则表达式应该是,\\|\\| 例如, String[] tokens = myString.split("\\|\\|");