簡體   English   中英

如何在 Java 中使用字符串類型的 ArrayList 搜索字符串值?

[英]How can I search String value with ArrayList of String type in Java?

我有一個城市列表,想從這些城市中搜索:

ArrayList myCities; // list of cities 
String searchString = scanner.nextLine();

List<String> matchedCities = new ArrayList(); // an empty list for storing matched cities

for (String c : myCities) {

    if (c.matches("(?i)" + searchString + ".*")) {
        matchedCities.add(c);
    }
}

例如。 如果它是當前數組中的一個元素,則蘋果 c 返回蘋果,如果輸入了 ap 或蘋果,但不是 ppl。

這僅適用於城市以或開頭/首字母開頭的情況,但是我希望如果用戶從中間輸入字符串,它應該返回建議的城市;

例如,如果用戶輸入 ppl,它應該返回 apple,或者任何具有 ppl 的單詞,無論它是以開頭還是包含在中間還是以結尾。

String::matches隱式檢查整個字符串,就好像應用了 "^" 和 "$" 錨點,因此檢查中間值的一個小修復是更新正則表達式以允許任何前綴".*"

此外,可能需要將searchString放在\Q\E之間以啟用按字符串字面量搜索,並自動轉義可能為正則表達式保留的字符。

if (c.matches("(?i).*\\Q" + searchString + "\\E.*")){
    matchedCities.add(c);
}

另一種選擇是將searchString和列表中的元素都轉換為相同的大小寫並使用contains

使用 Stream API 的示例實現:

String search = searchString.toLowerCase();
List<String> matchedCities = cities
    .stream()
    .filter(c -> c.toLowerCase().contains(search))
    .collect(Collectors.toList());

更新

要返回/打印search字符串后面的單詞部分,可以使用String::substringString::indexOfString::lengthcity.substring(city.indexOf(search) + search.length())

String search = searchString.toLowerCase();
List<String> afterMatch = cities
    .stream()
    .filter(c -> c.toLowerCase().contains(search))
    .map(c -> c.substring(c.indexOf(search) + search.length()))
    .peek(System.out::println) // print the part after the search
    .collect(Collectors.toList());

我建議您閱讀字符串 class 的 Java 文檔。 字符串 class 有一個方法 contains 可以給你這個結果。 這是一個鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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