你是否被空格所欺骗
先说一下我遇到的问题,我在网页上复制了一段文字
backward 退步的,相反的bald 秃的balk 妨碍balmy 温和的
band 条,带,联合,结合bandit 强盗banish 驱逐出境bar 法院
barbarian 野蛮……
我需要送字符串中筛选出英文字符,并且实现英文字符之间存在一个空格,目标如下
// baboon backward bald balk balmy band bandit banish bar barbarian
搜首先复习了一下文件操作,读取到stringBuilder
FileReader fileReader = null;
StringBuilder stringBuilder = null;
// 读取字符串
try {
fileReader = new FileReader("src\\com\\haojinhui\\test\\b.txt");
int read;
char[] chars = new char[1024];
stringBuilder = new StringBuilder();
while ((read = fileReader.read(chars)) != -1) {
stringBuilder.append(chars, 0, read);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileReader != null) {
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
stringBuilder中的内容如下
System.out.println(stringBuilder.toString());
// backward 退步的,相反的bald 秃的balk 妨碍balmy 温和的band 条,带,联合,结合bandit 强盗banish
接着开始筛选英文,并保留到stringBuilder1
StringBuilder stringBuilder1 = new StringBuilder();
if (stringBuilder != null) {
for (int i = 0; i < stringBuilder.length(); i++) {
char c = stringBuilder.charAt(i);
char c1 = 0;
if (i + 1 < stringBuilder.length()) {
c1 = stringBuilder.charAt(i + 1);
}
if (c >= 'a' && c <= 'z') {
stringBuilder1.append(c);
if (c1 == ' ') {
stringBuilder1.append(' ');
}
}
}
}
stringBuilder1中的内容如下
System.out.println(stringBuilder.toString());
// baboonbackwardbaldbalkbalmybandbanditbanishbarbarbarianbarebar
是不是出现问题了,英文单词直接应该是存在一个空格的,怎么不见了,让我们锁定这行代码
if (c1 == ' ') {
stringBuilder1.append(' ');
}
通过debug,发现了一件神奇的事情
baboon 狒狒 英文于仲文之间的空格(c1)显然是8194,而不是我没平时见到的32,后来通过百度得到
此时真相大白,得出结论呢中文的空格与英文不同,更改代码,问题成功解决
if (c1 == 8194) {
stringBuilder1.append(' ');
}
最后总结为一点
char c = ' '; // 正常的空格
char c1 = ' '; // 野生的空格
System.out.println((int) c); // 32
System.out.println((int) c1); // 8194