1

我正在尝试使用 regex 将以下 String 转换为 String 元素数组:

"a,b,c,,1,19,d,U,1,0,,0,7"

这是我使用的正则表达式:

",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"

将此添加到 Java 代码中:

import java.util.Arrays;

public class TestRegex {

    public static void main(String args[]){

        final String line = "a,b,c,,1,19,d,U,1,0,,0,7";
        final String[] row = line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1);

        Arrays.stream(row).forEach(element -> System.out.println("element : "+element));

    }
}

印刷 :

element : a
element : b
element : c
element : 
element : 1
element : 19
element : d
element : U
element : 1
element : 0
element : 
element : 0
element : 7

到目前为止,一切都很好。如果我然后将"和添加\n到行变量: "a,b,c,,1,19,d,U,1,0,,0,7"\n" 元素未正确解析。

使用新的正则表达式更新代码:

public class TestRegex {

    public static void main(String args[]){

        final String line = "a,b,c,,1,19,d,U,1,0,,0,7\"\n";
        final String[] row = line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1);

        Arrays.stream(row).forEach(element -> System.out.println("element : "+element));

    }
}

印刷 :

element : a,b,c,,1,19,d,U,1,0,,0,7"

我可以修改字符串以替换 " 和 \n 的所有实例,但我正在尝试使用正则表达式。可以更新正则表达式以忽略 \n 和 " a 字符串的结尾 "a,b,c,,1,19 ,d,U,1,0,,0,7" ?

所以应该打印以下内容:

element : a
element : b
element : c
element : 
element : 1
element : 19
element : d
element : U
element : 1
element : 0
element : 
element : 0
element : 7
4

1 回答 1

4

您可以使用以下方法拆分:

[,\"\n]

代码:

jshell> String line = "a,b,c,,1,19,d,U,1,0,,0,7\"\n";
jshell> line.split("[,\"\n]");
$102 ==> String[13] { "a", "b", "c", "", "1", "19", "d", "U", "1", "0", "", "0", "7" }

[,\"\n]是一个匹配,"\n用于拆分的字符类。

ONLINE DEMO

于 2021-08-27T17:55:19.287 回答