Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于分隔符拆分多行字符串_Java_Java.util.scanner - Fatal编程技术网

Java 基于分隔符拆分多行字符串

Java 基于分隔符拆分多行字符串,java,java.util.scanner,Java,Java.util.scanner,我正在尝试通过扫描仪拆分下面的多行字符串。我想拆分以“A |开头的行” 输出 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 sca

我正在尝试通过扫描仪拆分下面的多行字符串。我想拆分以“A |开头的行”

输出

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

默认情况下,java中的正则表达式仅在整个输入序列的开头和结尾匹配

这样,必须启用多行模式来分别考虑每条线。只需在正则表达式前面加上标记

(?m)
,即可启用多行模式

scan.useDelimiter("(?m)^A\\|");
请参见此处的演示:

请尝试以下操作:

try (final Scanner scan = new Scanner(abcd)) {
        scan.useDelimiter("(?:(^A\\|)|(\nA\\|))");
        while (scan.hasNext()) {
            System.out.println("Group");
            System.out.println("A|" + scan.next());
        }
    }

有关如何使用多行的信息,请参见split@ScaryWombat. 谢谢我尝试了那个解决方案字符串[]段落=abcd.split((?m)^A\\\\\\$\\R?);但这似乎不起作用。@Patan我认为即使是第一行也没有得到考虑。您可以试试这个:
String abcd=“B | 15 | ga | a\r\nA | 14 | 23 | 656\r\nA | 11 | 424 | 6262”
,请检查输出。@Ashraf.Shk786。谢谢你的注意。是的,它也打印第一行。我怎样才能避免that@Patan
scan.useDelimiter((?m)^A\\ |)
应该可以工作,但如果不工作,我建议您尝试这样做:
步骤1。
使用新行拆分/分离字符串,并将其存储为数组
步骤2。
然后尝试打印数组中的数据并对
A
进行模式匹配,并继续打印数据,直到图案匹配后匹配打印新行或执行任何需要的操作,并反复重复
步骤2
,直到从阵列中打印出最后一个元素。
try (final Scanner scan = new Scanner(abcd)) {
        scan.useDelimiter("(?:(^A\\|)|(\nA\\|))");
        while (scan.hasNext()) {
            System.out.println("Group");
            System.out.println("A|" + scan.next());
        }
    }