我只需要在字符串的引用部分中删除所有空格。
给这个:
10 00,400,"a1 b2 c3 ",zz xx,100
我需要这个:
10 00,400,"a1b2c3",zz xx,100
显然,仅限于报价区域是我遇到麻烦的原因。
字符串长度不一,可以有多个引用部分。
答案 0 :(得分:2)
不使用正则表达式 - 但有效
public String replaceWithinQuotes(String input) {
String[] output = input.split("\"");
StringBuilder builder = new StringBuilder();
for ( int i =0; i < output.length-1; i++ ) {
if ( i %2 == 0 ) {
builder.append(output[i]);
} else {
builder.append(output[i].replaceAll("[ ]+", ""));
}
builder.append("\"");
}
builder.append(output[output.length-1]);
return builder.toString();
}
注意 - 如果您使用此项 - 请确保数组的长度为奇数。如果不是,那么你有不平衡的报价,你必须以适合你的应用的方式处理它。
答案 1 :(得分:1)
这是一个小例程,当文本中有一组引号时似乎工作得很好:
public static String cropSpacesWithinQuotes(String expression) {
Pattern pattern = Pattern.compile("\"[\\S*\\s\\S*]*\"");
StringBuilder noSpaces=new StringBuilder();
int initialPosition=0;
Matcher matcher = pattern.matcher(expression);
while (matcher.find(initialPosition)) {
int pos=matcher.start();
noSpaces.append(expression.substring(initialPosition, pos-initialPosition));
initialPosition=matcher.end();
noSpaces.append(matcher.group().replaceAll(" ", ""));
}
noSpaces.append(expression.substring(initialPosition));
return(noSpaces.toString());
}
执行一些单元测试我意识到,当有一对引号时,两组中的文本也会裁剪其空格。对变量initialPosition的一些操作应该可以解决你的问题。
我希望这会有所帮助。
答案 2 :(得分:1)
假设引号是平衡的,那么你可以实现这样的方法:
public static void main(String[] args) {
String str = "10 00,400,\"a1 b2 c3 \",zz xx,100, \"a b\"";
StringBuffer sb = new StringBuffer();
Matcher matcher = Pattern.compile("\"([^\"]+)\"").matcher(str);
while (matcher.find()) {
matcher.appendReplacement(sb, matcher.group().replaceAll("\\s+", ""));
}
System.out.println(sb.toString());
}
打印:
10 00,400,"a1b2c3",zz xx,100, "ab"