Java - 删除引号String外的逗号周围的空格?

时间:2017-03-17 13:33:39

标签: java regex string

我有一个String,如下所示:

String s = "A,  Category,   \"Agriculture, forestry and fishing\",";

我想删除逗号周围的空格(在引号外)。所以我的字符串应该是这样的:

A,Category,"Agriculture, forestry and fishing",

我试过跟随RE:

String s = s.replaceAll("[,]\\s+", ",");

但输出是:

A,Category,"Agriculture,forestry and fishing",

我应该在正则表达式中进行哪些更改,以避免更改引号内的逗号?

1 个答案:

答案 0 :(得分:2)

您可以使用:

String str = "A,  Category,   \"Agriculture, forestry and fishing\",";
String result = str.replaceAll(" (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", "");
//------------------------------^--------------------------------------
System.out.println(result);

这将打印:

A,Category,"Agriculture, forestry and fishing",
//----------------------^---------------------

引号内的空格不会改变,只是在引号之外。

以下是code DEMO,此处为regex DEMO

修改

这部分来自 @Exception_al 所以他建议使用这个:

String result = str.replaceAll("(\\s*,\\s*)(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", ",");

如果您想要替换逗号,和单词之间的所有空格,此解决方案非常好。

您可以在regex DEMO

中查看这种方法的效果