Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 删除CSV行的字符串引号中的逗号_Java_Android_Regex - Fatal编程技术网

Java 删除CSV行的字符串引号中的逗号

Java 删除CSV行的字符串引号中的逗号,java,android,regex,Java,Android,Regex,目前,我倾向于删除CSV行字符串中的逗号 这是我的期望 // (1) ",123,456," -> ",123456," // (2) ","abc,def"," -> ","abcdef"," // (3) ","123,456"," -> ","123456"," // (4) ","abcdef,"," -> ","abcdef"," 我编写了以下代码 String[] test = {

目前,我倾向于删除CSV行字符串中的逗号

这是我的期望

    // (1) ",123,456,"     -> ",123456,"
    // (2) ","abc,def","   -> ","abcdef","
    // (3) ","123,456","   -> ","123456","
    // (4) ","abcdef,","   -> ","abcdef","
我编写了以下代码

    String[] test = {
        "\",123,456,\"",
        "\",\"abc,def\",\"",
        "\",\"123,456\",\"",
        "\",\"abcdef,\",\""            
    };

    final Pattern commaNotBetweenQuotes = Pattern.compile("(?<!\"),(?!\")");

    for (String d : test) {
        System.out.println("O : " + d);
        String result = commaNotBetweenQuotes.matcher(d).replaceAll("");
        System.out.println("R : " + result);
    }
String[]测试={
"\",123,456,\"",
“\”、“\”abc、def\”、\”,
"\",\"123,456\",\"",
“\”、\“abcdef、\”、\“
};
最终模式commaNotBetweenQuotes=模式.compile(“(?说明

替换字符串中的逗号,使用空捕获组<代码>(\b)应避免Android的问题,如果后置引用<代码> $< < /C> >不匹配,则语言插入空字符而非零:

正则表达式:
((?:“,\d |\d,”)|“,”)|(\b),

替换为:
$1

输入

输出

",123456," 
","abcdef","
","123456"," 
","abcdef","
免责声明
这假设您要保留的逗号都被引号包围,如“alpha”、“beta”、“1234”

您还可以在字符串中找到第二个出现的,然后用“”替换。这里有一些示例:


您的结果有什么问题老实说,使用正则表达式解析CSV很麻烦。请尝试使用opencsv。不是。我目前正在使用opencsv执行解析。上面的步骤是对opencsv无法处理的某些情况进行预筛选。例如:“这是字符串”,123,“这是另一个字符串。”“。事实上,行中只有3个元素,但opencsv将它们视为4。我不了解您的CSV模式。似乎您任意知道如何解析字符串。大小写(1)是
”,123456,“
是一个带引号的字符串,里面有逗号,但您让结果是:
”,123456,”
。您删除了两个逗号之间的逗号。但是在案例(4)中,您希望删除字符串
“abcdef”中的逗号,
@acdcjunior是正确的,案例(4)
,“abcdef,”
是错误的。首先,它以一个引号开头。这既不是空字符串,也不是文字。如果你传递的是CSV的一部分,请确保你有完整的字段。如果是CSV的一部分,那么你的所有测试都将导致你出现未定义的行为。谢谢。但是,在Android平台上使用$1会产生问题,正如你在我的链接。这就是我避免使用它们的原因:)请参阅文章,了解如何在android平台上使用替换为$#格式该链接不相关,因为android中的“问题”是,对于不匹配的组,他们将其替换为“null”而不是“@deno”。第一个结果不会产生OP想要的结果。对于输入
”,123456,“
OP需要输出:
”,123456,
    final Pattern commaNotBetweenQuotes = Pattern.compile("(?<!\"),(?!\")");
     final Pattern commaNotBetweenQuotes = Pattern.compile("(?<!\"),(?!\")|(?<![\"0-9]),(?=\")");
",123,456," 
","abc,def","
","123,456"," 
","abcdef,","
",123456," 
","abcdef","
","123456"," 
","abcdef","