csdn把我的空格干掉了,是这样的:

解决方案 »

  1.   

    先按引号将需要去去空格的字符串段落截取出来,在通过正则替换空格
    String str = " s  s   s";
    System.out.println(str.replaceAll("\\s{2,}", " "));
      

  2.   

    s.replaceAll("(\\w+)\\s+", "$1 ")
      

  3.   

    6F的问题也麻烦先回答一下。我先无视不匹配的'
    直接弄一个正则比较麻烦。
    Map<String, String> map = new HashMap<String, String>();
    Pattern quotRegex = Pattern.compile("'.*?'");
    Matcher matcher = quotRegex.matcher(str);
    StringBuffer buff = new StringBuffer();
    while (matcher.find()) {
      String key = "__PLACEHOLDER__" + map.size();
      String value = matcher.group();
      map.put(key, value);
      matcher.appendReplacement(buff, key);
    }
    matcher.appendTail(buff);// 以上内容将配对的引号内的东西,存为一个不太容易出现的占位符
    // 以下将连续的空白符号替换掉,此时,已经不会有引号内的连续空白干扰正则StringBuffer buff2 = new StringBuffer();
    String str2 = buff.toString().replaceAll("\\s{2,}", " ");
    Pattern placeholderRegex = Pattern.compile("__PLACEHOLDER__\\d+");
    Matcher placeholderMatcher = placeholderRegex.matcher(str2);
    while (placeholderMatcher.find()) {
      String key = placeholderMatcher.group();
      String value = map.get(key);
      placeholderMatcher.appendReplacement(buff2, value);
    }
    placeholderMatcher.appendTail(buff2);return buff2.toString();
    下面代码是概念性的,直接手写,没经过编译,更没有测试过
      

  4.   

    用一个正则替换整个字符串比较困难。
    其实只要替换用"'"分割后的首尾两个字符串就可以了
    public class Test7 {
    public static void main(String[] args) {
    String str1 = "a b   c'   d  ef'   g";
    String str2 = "a b   c'  '  d  ef'   g";
    String str3 = "a   a  s '2''3 '''' ' g''  sssd'''";
    System.out.println(formatStr(str1));
    System.out.println(formatStr(str2));
    System.out.println(formatStr(str3));
    } static String formatStr(String src) {
    final String flag = "'";
    boolean isLastFlag = false;
    // 不包含flag直接替换
    if (!src.contains(flag)) {
    return src.replaceAll("\\s{2,}", " ");
    }
    // 以flag分割数组,只有第一个和最后一个元素需要替换
    // 考虑字符串最后一个字符恰好是flag的情况
    if (src.endsWith(flag)) {
    src += " ";
    isLastFlag = true;
    }
    final String[] arr = src.split(flag);
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < arr.length; ++i) {
    if (i == 0) {
    sb.append(arr[i].replaceAll("\\s{2,}", " "));
    } else if (i == arr.length - 1) {
    if (!isLastFlag) {
    sb.append(flag + arr[i].replaceAll("\\s{2,}", " "));
    } else {
    sb.append(flag);
    }
    } else {
    sb.append(flag + arr[i]);
    }
    }
    return sb.toString();
    }
    }
      

  5.   

    String s = "a      '     b' '    c      '";
    Pattern p = Pattern.compile("\\'(\\s{2,})");
    Matcher m = p.matcher(s);
    while(m.find())
    {
    s=s.replace(m.group(1), " ");
    p = Pattern.compile("\\'(\\s{2,})");
    m = p.matcher(s);

    }
    p = Pattern.compile("(\\s{2,})\\'");
    m = p.matcher(s);
    while(m.find())
    {
    s=s.replace(m.group(1), " ");
    p = Pattern.compile("(\\s{2,})\\'");
    m = p.matcher(s);
    }
    System.out.println(s);这几行代码貌似可以满足你的需求,你看看吧!如果有不足之处,望斧正。