我试图通过扫描仪分割下面的多行字符串。我想拆分以“ A | ”
开头的行Input
A|14|23|656
B|15|ga|a
A|11|424|6262
输出
Group
A|14|23|656
B|15|ga|a
Group
A|11|424|6262
我尝试过如下扫描仪。
public static void main(String[] args) {
String abcd = "A|14|23|656\r\nB|15|ga|a\r\nA|11|424|6262";
try (final Scanner scan = new Scanner(abcd)) {
scan.useDelimiter("^A\\|");
while (scan.hasNext()) {
System.out.println("Group");
System.out.println("A|" + scan.next());
}
}
}
实际:它只考虑第一行匹配 A | 而不是其他行。
Group
A|14|23|656
B|15|ga|a
A|11|424|6262
答案 0 :(得分:0)
默认情况下,java中的regex仅匹配整个输入序列的开头和结尾。
因此,您必须启用多行模式才能分别考虑每一行。只需在您的正则表达式之前加上标记(?m)
即可启用多行模式。
scan.useDelimiter("(?m)^A\\|");
在此处查看演示:https://ideone.com/1HwXCU
答案 1 :(得分:0)
请试试这个:
try (final Scanner scan = new Scanner(abcd)) {
scan.useDelimiter("(?:(^A\\|)|(\nA\\|))");
while (scan.hasNext()) {
System.out.println("Group");
System.out.println("A|" + scan.next());
}
}