正则表达式删除引用文本中的空格

时间:2012-05-22 17:42:02

标签: java regex

我只需要在字符串的引用部分中删除所有空格。

给这个: 10 00,400,"a1 b2 c3 ",zz xx,100

我需要这个: 10 00,400,"a1b2c3",zz xx,100

显然,仅限于报价区域是我遇到麻烦的原因。

字符串长度不一,可以有多个引用部分。

3 个答案:

答案 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"