Java 删除CSV行的字符串引号中的逗号
目前,我倾向于删除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 = {
// (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”
您还可以在字符串中找到第二个出现的,然后用“”替换。这里有一些示例:
”,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","