基于Delimiter拆分多行字符串

时间:2017-07-25 05:18:20

标签: java java.util.scanner

我试图通过扫描仪分割下面的多行字符串。我想拆分以“ 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

2 个答案:

答案 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());
        }
    }