我们正在调试一些旧代码并遇到这个语句,有人知道它在做什么吗?
String value=...
value.toLowerCase(Locale.ENGLISH).split("[^\\w]+");
最佳答案
答案是它在做很多事情时相当天真。不然他们为什么要使用单词字符 [^\w]
的否定字符类来表示简单的 \W
中的可读性更高?没有任何意义。
此外,愚蠢的语言环境表明他们一定害怕自己在土耳其,因为我不知道除了土耳其语和阿塞拜疆语之外的任何其他语言环境,那里的大小写存在差异。通常 LATIN CAPITAL LETTER I 小写为 LATIN SMALL LETTER I,正如您所期望的那样,但在突厥语言中它小写 LATIN SMALL LETTER DOTLESS I。
即便如此,除非它们使用仅在 Java 7 中可用的嵌入式 "(?U)"
标志,否则它不会正确地用于 Unicode。你不能使 \w
和 \W
只是通过那个愚蠢的毫无意义的语言环境来玩 Unicode 规则。您必须使用 "(?U)"
,否则,如果您实际编译模式,则使用 UNICODE_CHARACTER_CLASSES
标志。两者都需要 Java 7。在此之前,Java 比使用正则表达式 charclass 快捷方式处理 Unicode 更糟糕。它实际上具有误导性、错误性和危害性。
否则笨蛋会认为像 naïvely 这样的常规英语单词有两个由非单词序列分隔的单词。这是 super 愚蠢的。
因此,在回答您的问题时,我认为它并没有按照其作者的想法行事。我向你保证它已经坏了,除非它完全是 ASCII 文本。参见 here对于 Java 7 之前发生的 hell 般的事情以及你必须做些什么来解决它们,请参阅 here对于 Java 7 带来的一些好处。
关于java - 这个正则表达式在 Java 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7072341/