【发布时间】:2017-12-24 16:12:48
【问题描述】:
我正在尝试生成一个符合 XSD 中模式的字符串。为了去除 XSD 模式中没有出现的任何字符,我正在执行以下操作(从我的代码中复制的 replaceAll 调用):
import java.lang.String;
public class HelloWorld {
public static void main(String[] args) {
test("Führ");
}
private static void test( String name ) {
name = name.toUpperCase( );
name = name.replaceAll (
"[^A-ZА-ЯΑ-ΩÄÀÁÂÃÅǍĄĂÆÇĆĈČĎĐÐÈÉÊËĚĘĜĢĞĤÌÍÎÏĴĶĹĻŁĽÑŃŇÖÒÓÔÕŐØŒŔŘẞŚŜŞŠȘŤŢÞȚÜÙÚÛŰŨŲŮŴÝŸŶŹŽŻ, '\\-–]",
""
);
System.out.println(name);
}
}
此片段运行良好,并打印出“FÜHR”。但是,在我正在运行的环境中,使用完全相同的replaceAll 语句,replaceAll 调用删除了Ü 字符并打印出FHR,其中包含来自数据库并开始的数据(即名称)与代码 sn-p ("Führ") 中的字符相同。
我很困惑...可能是什么原因,我该如何解决这个问题?
PS:源文件编码为UTF-8(Eclipse .settings:encoding//<<<src-path>>>.java=UTF-8)
【问题讨论】:
-
尝试设置 LC_ALL=C。
-
@WiktorStribiżew 这看起来是一个 Unix 设置...我会尝试为 Windoze 环境找到一个等价物。
-
@WiktorStribiżew 尝试使用
Locale.setDefault( Locale.ROOT );... 没有变化。 -
什么是"在我运行的环境中"详细?
-
我认为正则表达式是错误的,因为我只匹配特定的代码点,而不是组合的字符 (U + ¨)。
标签: java regex unicode character-encoding replaceall