Java:明明有空格 indexOf 却是 -1
问题描述
项目中 bug 引出的问题,一个字符串中明明有空格,然而使用 String.indexOf(" ")
却得到了 -1
- 出现问题的字符串:推 5
问题原因
原因大概是由于 Unicode 中存在 3 种空格:(\u00A0,\u0020,\u3000) 分别为不间断空格,半角,全角空格,而代码中使用的一般是半角空格,indexOf 其他两个都会得到 -1
问题修复
统一空格后再进行字符串处理,或者更甚者除了回车和换行,其他空白字符都转变为半角空格,下为代码举例:
/**
* 除了回车和换行,其他空白字符都转变为半角空格
*
* @param str
* @return
*/
private String unitizeSpace(String str) {
str = str.replaceAll("[^\\S\\r\\n]+", " ");
return str;
}