1

我有一个很大的对话,我将它作为字符串处理,在字符串之间有很多空格也可能是不可见的非单词字符。下面是一个示例字符串:

public static void main(String[] args) {
  String str = " TWD day count Spot                              6-Sep / 2-Sep 2016 1W7d                        13-Sep / 9-Sep 2016 1M30d                      6-Oct / 4-Oct 2016 2M62d                      7-Nov / 3-Nov 2016 3M91d                      6-Dec / 2-Dec 2016 6M181d                    6-Mar / 2-Mar 2017 9M273d                    6-Jun / 2-Jun 2017 12M365d                  6-Sep / 4-Sep 2017 18M546d                  6-Mar / 2-Mar 2018 24M730d                  6-Sep / 4-Sep 2018";
  str = str.toString().replaceAll(" +", "");
  System.out.println("str="+str.toString().trim().replaceAll(" ", ""));
}

我尝试了许多字符串函数来删除空格,如trim(), replaceAll(" ",""), replaceAll("\\s",""), replaceAll(" +",""), replaceAll("\\s\\u00a0",""), stringUtils.normalize()function 等。我尝试了很多但没有按预期工作。

我期待输出如下:

"String str = " TWD 天数 现货 2016 年 9 月 6 日 / 9 月 2 日 1W7d 2016 年 9 月 13 日 / 9 月 9 日 1M30d 2016 年 10 月 6 日 / 10 月 4 日 2M62d 2016 年 11 月 7 日 / 11 月 3 日 3M91d 12 月 6 日 / 2 -2016 年 12 月 6M181d 2017 年 3 月 6 日 / 2017 年 3 月 2 日 9M273d "

只有一个空格,而不是长的白色重复空格。

请帮忙。

找到答案如下:

System.out.println("str="+str.replaceAll("(?U)\\s+", " "));
4

2 回答 2

8

如果您的文本中有非标准空格,例如 Unicode 类别中的字符:

用这个:

str = str.replaceAll("[\\s\\p{Z}]+", " ").trim();

where\s匹配空白字符 ( [ \t\n\x0B\f\r]),并且\p{Z}是上面列出的简写\p{Zs}\p{Zp}\p{Zl}

它基本上会将所有空格分隔符替换为空格,将连续空格折叠成一个空格,并删除前导和尾随空格。

于 2017-01-06T02:04:26.460 回答
0
public static void main(String []args){
    String str = " TWD day count Spot                              6-Sep / 2-Sep 2016 1W7d                        13-Sep / 9-Sep 2016 1M30d                      6-Oct / 4-Oct 2016 2M62d                      7-Nov / 3-Nov 2016 3M91d                      6-Dec / 2-Dec 2016 6M181d                    6-Mar / 2-Mar 2017 9M273d                    6-Jun / 2-Jun 2017 12M365d                  6-Sep / 4-Sep 2017 18M546d                  6-Mar / 2-Mar 2018 24M730d                  6-Sep / 4-Sep 2018";
    str = str.replaceAll("\\s+", " ");
    System.out.println(str);
}

输出:

TWD 天数 现货 2016 年 9 月 6 日 / 9 月 2 日 1W7d 2016 年 9 月 13 日 / 9 月 9 日 1M30d 2016 年 10 月 6 日 / 10 月 4 日 2M62d 2016 年 11 月 7 日 / 11 月 3 日 3M91d 2016 年 12 月 6 日 / 12 月 2 日 6M181d 6 -2017 年 3 月 / 2 日 9M273d 2017 年 6 月 6 日 / 6 月 2 日 12M365d 2017 年 9 月 6 日 / 9 月 4 日 18M546d 2018 年 3 月 6 日 / 3 月 2 日 24M730d 2018 年 9 月 6 日 / 9 月 4 日
于 2017-01-06T02:01:41.317 回答