以下是发生的事情。
“лосан”中的用户类型
我有一堆产品,其位置是“лосанджелис”
如果我这样做:
String userInput = "лос ан"
for(Product product : products) {
if(product.getCity().trim().toLowerCase().contains(userInput.trim().toLowerCase())) {
System.out.println("MATCH");
}
}
我没有得到MATCH。
这适用于拉丁字符
答案 0 :(得分:1)
尝试在等式的两边指定toLowerCase()中的Locale:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toLowerCase(java.util.Locale)
答案 1 :(得分:1)
编辑器和编译器(javac -encoding)必须使用相同的编码。
编译器编码很容易完成。编辑器源编码可以用程序员的编辑器如NotePad ++或JEdit进行测试,它可以切换编码。
您也可以通过u-escape Java源文本来检查:
String userInput = "\u043b\u043e\u0441 \u0430\u043d";
如果不起作用,编码之间就会出现差异。
此外已提及String.toLowerCase(new Locale("ru", "RU"))
等。
答案 2 :(得分:0)
使用jdk 1.8.0_45,以下代码在两种情况下都给出匹配:
System.out.println("лос анджелис".trim().toLowerCase().contains("лос ан".trim().toLowerCase()));
System.out.println("лос анджелис".trim().toLowerCase(Locale.ROOT).contains("лос ан".trim().toLowerCase(Locale.ROOT)));
正如其他人已经提到的那样,您可能会寻找String#toLowerCase
作为{{3}}的参数。