从字符串中删除“空”字符
问题内容:
我使用的框架会不时返回格式错误的字符串,其中包含“空”字符。
例如,“ foobar”表示为:[,f,o,o,b,a,r]
第一个字符不是空格(’‘),因此System.out.printlin()将返回“ foobar”而不是“
foobar”。但是,String的长度是7,而不是6。显然,这使大多数String方法(等于,拆分,子字符串等)变得无用。有没有办法从字符串中删除空字符?
我试图建立一个像这样的新字符串:
StringBuilder sb = new StringBuilder();
for (final char character : malformedString.toCharArray()) {
if (Character.isDefined(character)) {
sb.append(character);
}
}
sb.toString();
不幸的是,这不起作用。与以下代码相同:
StringBuilder sb = new StringBuilder();
for (final Character character : malformedString.toCharArray()) {
if (character != null) {
sb.append(character);
}
}
sb.toString();
我也无法检查像这样的空字符:
if (character == ''){
//
}
显然,字符串..出了点问题,但是我无法更改正在使用的框架,也无法等待他们修复它(如果这是其框架内的错误)。我需要处理此字符串并将其清理。
有任何想法吗?
问题答案:
可能是NULL字符,由表示\0
。您可以通过摆脱它String#trim()
。
要确定确切的代码点,请执行以下操作:
for (char c : string.toCharArray()) {
System.out.printf("U+%04x ", (int) c);
}
然后,您可以在此处找到确切的字符。
更新: 根据更新:
有人知道一种只包含有效字符范围而不是排除95%的UTF8范围的方法吗?
您可以借助正则表达式来做到这一点。请参阅此处的@polygenelubricants
答案以及此答案。
另一方面,您也可以从根本上解决问题,而不是解决问题。更新文件以摆脱BOM表标记,这是一种区分UTF-8文件与当今不值钱的文件的传统方法,或者是使用Reader
可识别并跳过BOM表的文件。也看到这个问题。