如何找出字串中子字串的出現次數
許多開發人員在嘗試確定子字串出現頻率時遇到問題給定字串中的出現次數。其中一個案例涉及以下演算法:
String str = "helloslkhellodjladfjhello"; String findStr = "hello"; int lastIndex = 0; int count = 0; while (lastIndex != -1) { lastIndex = str.indexOf(findStr, lastIndex); if (lastIndex != -1) count++; lastIndex += findStr.length(); } System.out.println(count);
為什麼演算法會失敗?
儘管成功識別了索引 0 處第一次出現的“hello”,但演算法在搜尋後續事件時進入無限循環。這是因為找到第一個符合項目後,lastIndex findStr.length() 變成等於 5,但 indexOf() 傳回的下一個「-1」結果導致 while 迴圈再次迭代,lastIndex 仍設定為 0。
如何解決此問題?
有多種方法可以解決此問題。一種是使用不同的子字串搜尋方法,例如 Apache Commons Lang 的 StringUtils.countMatches()。這是一個範例:
String str = "helloslkhellodjladfjhello"; String findStr = "hello"; System.out.println(StringUtils.countMatches(str, findStr)); // Outputs 3
或者,您可以修改原始演算法來處理「-1」情況:
String str = "helloslkhellodjladfjhello"; String findStr = "hello"; int lastIndex = 0; int count = 0; while (lastIndex != -1) { lastIndex = str.indexOf(findStr, lastIndex); if (lastIndex != -1) { count++; lastIndex += findStr.length(); } else { break; // Exit the loop if no more occurrences are found } } System.out.println(count); // Outputs 3
以上是如何正確計算 Java 字串中子字串的出現次數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!