gpt4 book ai didi

java - 正则表达式将所有土耳其符号替换为常规拉丁符号

转载 作者:行者123 更新时间:2023-12-03 01:16:39 27 4
gpt4 key购买 nike

我有一个类,它将所有土耳其符号替换为类似的拉丁符号,并将结果传递给搜索器。

这些是符号替换的方法

@Override
String replaceTurkish(String words) {

if (checkWithRegExp(words)) {
return words.toLowerCase().replaceAll("ç", "c").replaceAll("ğ", "g").replaceAll("ı", "i").
replaceAll("ö", "o").replaceAll("ş", "s").replaceAll("ü", "u");
} else return words;
}

public static boolean checkWithRegExp(String word){
Pattern p = Pattern.compile("[öçğışü]");
Matcher m = p.matcher(word);
return m.matches();
}

但这总是返回未修改的单词语句。

我做错了什么?

提前致谢!

最佳答案

根据 Java 7 api,Matcher.matches()

Attempts to match the entire region against the pattern.

您的模式是“[öçğışü]”,regex101.com(一个很棒的资源)说它会匹配

a single character in the list öçğışü literally

也许您可能已经发现了问题。您的正则表达式不会匹配除单个土耳其字符之外的任何内容,因为您试图将整个区域与仅接受一个字符的正则表达式进行匹配。

根据 Andreas 在评论中的建议,我建议使用 find(),或者使用如下正则表达式:

“.*[öçğışü].*”

它实际上应该找到包含任何土耳其语特定字符的单词。

此外,我会指出正则表达式区分大小写,因此如果这些字母有大写变体,您也应该包含它们并修改您的替换语句。

最后(编辑):您可以使您的模式不区分大小写,但您的replaceAll仍然需要更改为不区分大小写。我不确定这将如何处理非拉丁字符,因此您应该在依赖它之前测试该标志。

Pattern p = Pattern.compile(".*[öçğışü].*", Pattern.CASE_INSENSITIVE);

关于java - 正则表达式将所有土耳其符号替换为常规拉丁符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232316/

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