簡體   English   中英

Java String.contains()在西里爾字符串上不起作用

[英]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");
    }

}

我沒有比賽。

這適用於拉丁字符

嘗試在等式兩邊的toLowerCase()中指定Locale: http ://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toLowerCase(java.util.Locale

編輯器和編譯器(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM