簡體   English   中英

在Java中查找以排序的String數組中的指定String開頭的第一個元素

[英]Finding the first element that starts with a specified String in a sorted String array in Java

我在Java中有一個排序的String數組。 我試圖找到第一個以該數組中用戶指定的String開頭的元素。 我首先考慮二進制搜索,但它找到相等的String而不是以用戶指定的String開頭的String。 我應該如何修改二進制搜索,以便實現我想要做的?

如果元素不存在,二進制搜索可以找到“小於所需元素的最后一個元素”(有時稱為“應該插入它的索引”)。

通過使用此功能進行二進制搜索,您可以找到一個元素並檢查:

  1. 如果它是確切的元素 - 那么它是具有此前綴的數組中的第一個元素,因為它是具有此前綴的“最小”元素,並且您已完成。
  2. 如果它不是相同的元素 - 通過增加一個 - 你得到的“最小的元素,大於所需的元素”。 此元素是數組中具有此前綴的第一個元素(如果數組有一個)。

此功能非常常見 - 例如,它存在於java的Arrays.binarySearch() 來自javadocs:

返回:搜索鍵的索引(如果它包含在數組中); 否則,( - (插入點) - 1)。 插入點定義為將鍵插入數組的點:第一個元素的索引大於鍵

從剛剛找到的索引中,很容易找到所需的元素。

代碼快照:

String[] arr = { "aa" , "bb","c", "cc" , "ccc", "cccc", "ddD" };
int idx = Arrays.binarySearch(arr, "c");
if (idx < 0) 
    System.out.println(arr[-1 * idx - 1]);
else System.out.println(arr[idx]);

暫無
暫無

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

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