我遇到了以下问题(简化)。我写了以下
Pattern pattern = Pattern.compile("Fig.*");
String s = readMyString();
Matcher matcher = pattern.matcher(s);
在读取一个字符串时,即使它以“Fig”开头,匹配器也无法匹配。我将问题追溯到字符串下一部分中的流氓字符。它的 codePoint 值 1633 来自
(int) charAt(i)
但与正则表达式不匹配。我认为这是由于输入过程中某处的非 UTF-8 编码所致。
Javadocs说:
预定义的字符类。任何字符(可能匹配也可能不匹配行终止符)
大概这不是严格意义上的字符,但仍然是字符串的一部分。如何检测此问题?
更新:这是由于 (char)10 不容易发现。我上面的诊断是错误的,下面的所有答案都与所提出的问题相关并且很有用。