- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类,它将所有土耳其符号替换为类似的拉丁符号,并将结果传递给搜索器。
这些是符号替换的方法
@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/
2016 年土耳其政府决定保留 GMT+3 时区以节省夏令时,但在 Android 上: Calendar calendar = Calendar.getInstance(); TimeZone tz
浏览器上 JavaScript 中的日期计算问题。有 3 个参数 -从日期、天数和到日期 从使用 JavaScript 中的日历组件选择的日期 = 30/10/2016输入的天数 = 2 基于没有。应
有人可以帮忙解决以下问题吗? 我的操作系统是最新的 windows 10,时区是 (UTC+0300) Istanbul(夏令时已被移除,时区设置为 +0300 在土耳其的最新规定之后 - 2016
我是一名优秀的程序员,十分优秀!