[英]Java String.contains() not working on a cyrillic string
這是發生了什么。
用戶輸入“лосан”
我有一堆產品的位置是“лосанджелис”
如果我做:
String userInput = "лос ан"
for(Product product : products) {
if(product.getCity().trim().toLowerCase().contains(userInput.trim().toLowerCase())) {
System.out.println("MATCH");
}
}
我沒有比賽。
這適用於拉丁字符
編輯器和編譯器(javac -encoding)必須使用相同的編碼。
編譯器編碼很容易完成。 可以使用諸如NotePad ++或JEdit之類的程序員的編輯器對源編碼的編輯器進行測試,該編輯器可以切換編碼。
您還可以u逃逸Java源文本以進行檢查:
String userInput = "\u043b\u043e\u0441 \u0430\u043d";
如果這樣不起作用,則編碼之間會有差異。
此外String.toLowerCase(new Locale("ru", "RU"))
已經提到過String.toLowerCase(new Locale("ru", "RU"))
等等。
使用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)));
正如其他人已經提到的那樣,您可能會尋找一個有效的Locale
作為String#toLowerCase
參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.