gpt4 book ai didi

java - 使用带有变音符号、撇号、重音符号等的文字字符使用正则表达式剥离字符失败

转载 作者:行者123 更新时间:2023-12-02 11:49:59 24 4
gpt4 key购买 nike

我正在尝试生成符合 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数据(即名称)来自数据库,并以与代码片段(“Führ”)中相同的字符开头。

我很困惑......可能是什么原因,我该如何解决这个问题?

<小时/>

PS:源文件的编码为UTF-8(Eclipse .settings: encoding//<<<src-path>>>.java=UTF-8 )

最佳答案

显然,当匹配带有变音符号、撇号、重音符号等的字符时,应该使用 unicode 单代码点来指定字符。

例如,对于 à 字符,正则表达式应指定 \u00E0 而不是文字 à。原因是,à 字符可以通过两种方式进行编码:

  • 作为单代码点的 à 字符(文字 à)
  • 作为双代码点的 à 字符(a 后跟重音符号 `)

在正则表达式中指定 unicode 代码点 \u00E0 将匹配 à 的两种编码。在正则表达式中指定文字 à 将仅匹配该字符在代码片段中的编码方式,如果将其编码为双代码点,则它将与单代码点不匹配 -同一角色的点版本。

使用 unicode 单代码点重写正则表达式解决了问题。对于问题中的 Ü 字符,正则表达式应指定 \u00DC。这与 Ü 的单代码点和双代码点编码相匹配。

我在这里找到了解决方案的信息:Regex Tutorial - Unicode Characters and Properties (段落:匹配特定代码点)。

关于java - 使用带有变音符号、撇号、重音符号等的文字字符使用正则表达式剥离字符失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47962187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com