使用java从字符串中删除多余的空格和不可见的字符

San*_*nvi 1 java string apache-stringutils

我有一个很大的对话,我把它当作字符串处理,在字符串之间有很多白色空格也可能是不可见的非字字符.下面是一个示例字符串:

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(" ", ""));
}
Run Code Online (Sandbox Code Playgroud)

我试过很多字符串函数删除空格状trim(),replaceAll(" ",""),replaceAll("\\s",""),replaceAll(" +",""),replaceAll("\\s\\u00a0",""),stringUtils.normalize()功能等许多我试过,但无法按预期工作.

我期待输出如下:

"String str ="TWD day count 2016年9月6日至9月9日1W7d 2016年9月13日至9月9日1M30d 2016年6月1日至10月4日2016年6月7日至2016年11月3日-Dec 2016 6M181d 6-Mar/2-Mar 2017 9M273d"

只有一个空格而不是长白色复制空格.

请帮忙.

找到答案如下:

System.out.println("str="+str.replaceAll("(?U)\\s+", " "));
Run Code Online (Sandbox Code Playgroud)

And*_*eas 6

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

用这个:

str = str.replaceAll("[\\s\\p{Z}]+", " ").trim();
Run Code Online (Sandbox Code Playgroud)

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

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