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.compile或Pattern.quote.
要查看compile和quote实际操作,以下是使用所有三种方法的示例:
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是字符串形式的正则表达式).
双引号在正则表达式中被解释为文字; 他们不是特殊的人物.您正在尝试匹配文字"||".
只需使用Pattern.quote(delimiter):
根据要求,这里有一行代码(与Sanjay相同)
final String[] tokens = line.split(Pattern.quote(delimiter));
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,则表示您没有传递正确的分隔符.
String[] strArray= str.split(Pattern.quote("||"));
Run Code Online (Sandbox Code Playgroud)
哪里
管道(|)是正则表达式中的特殊字符.为了逃避它,你需要用反斜杠(\)作为前缀.但在java中,反斜杠也是一个转义字符.所以你需要用另一个反斜杠来逃避它.所以你的正则表达式应该是,\\|\\|
例如,
String[] tokens = myString.split("\\|\\|");