我有一个字符串里面有个奇怪的空格字符

3

我有一个Java方法,用于在短语中查找单词,如果找到该单词,则将其从短语中删除。单词和短语可以是任何内容。它们是可变的。这是我的代码:

private String removeWord( String phrase, String word ) {
    phrase = phrase.replaceAll( "(?i)" + word , "" );
    return phrase;
}

我遇到的问题是,有一个短语传递到这个方法中:
“古罗马帝国如此庞大、强大且雄心勃勃,以至于几乎触及一切。罗马的影响是如此广泛,即使在今天,大多数西方国家的语言、文化、法律和政府仍然带着罗马的印记。”
要查找并从文本中删除的单词是“Roman Empire”,但无法删除。经过调查,我发现这是因为短语中的空格不是常规空格。当我将该短语的文本复制到Notepad++中,并搜索相同的单词时,我也找不到它!
请参见附带的屏幕截图。第5行是我手动编写的一行,正如您所看到的,Notepad++可以找到它,但它无法在第1行中找到“Roman Empire”。在文件中计算“Roman Empire”时,它仅发现了一次!
那个奇怪的空间是什么?!
(更多细节)
我用Java编写了这段代码来检查两个空格之间的差异:
char a = ' ';
char b = ' ';

System.out.println( (int) a );  // Prints 160
System.out.println( (int) b );  // Prints 32

奇怪的是,这2个空格看起来完全相同!

4
如果您能提供一个简短但完整的程序来展示问题,那将非常有帮助。在截图中很难区分不同的空格。 - Jon Skeet
你从哪里得到那个短语的? - Rohit Jain
在编程语言中加载文件并在调试器中查看代码点。 - millimoose
@Jon..我理解了。我想问的是有没有一种方法或指南来了解如何检测不同的空格字符。我会更新我的问题以使其更清晰明了。 - Brad
2
与其使用文本编辑器查看文件,不如使用十六进制编辑器打开它,例如http://frhed.sourceforge.net。 - Michael Zilbermann
由于您正在使用Notepad ++,请转到“查看”->“显示符号”->“显示所有字符”,然后您将看到它是什么类型的空格 :) - Patashu
1个回答

1

可能是不间断空格。您可以明确地寻找它们,或者用\s(也称为[:space:])替换搜索字符串中的空格。


嘿,那听起来像是一个简单的答案,但我相信在找出发生了什么之前,我们中不止一个人疯了!:-D 感谢你的回答和其他人的回答,以及我们在HeavyDots处理它时的经验,我们已经获得了足够的信息,并写了一篇既有趣又解释性的文章!=)http://heavydots.com/blog/when-the-white-space-became-a-beast - Alexandru Trandafir Catalin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接