[英]what is the best way to full text search in a large Array of String in android?
[英]Best way to search for a special string in a text
如果我有大約3000個字符的文字。 我想搜索具有某些特征的字符串,例如[*]
類的字符串。
也就是說,我想從[a]
和[bc]
sjfhshdkfjhskdhfksdf[a]sfdsgfsdf[bc]
我知道有一種稱為KMP的算法可以保證通過文本進行線性時間搜索操作,但是在這里我找不到固定的字符串,也許我必須在某個地方使用一些正則表達式。
我怎么能比O(n ^ 2)更好呢? 如果我使用Java,是否有任何光源庫?
不需要任何庫,您已經有效地描述了regex的用例! 它們針對搜索進行了高度優化,在這種情況下將為O(n) 。
String str = "sjfhshdkfjhskdhfksdf[a]sfdsgfsdf[bc]";
List<String> allMatches = new ArrayList<>();
Matcher m = Pattern.compile("\\[[^\\]]*]").matcher(str);
while (m.find()) {
allMatches.add(m.group());
}
如果您有任何疑問,但確實希望您可以看到一些O(n),請使用以下算法:
String str = "sjfhshdkfjhskdhfksdf[a]sfdsgfsdf[bc]";
List<String> allMatches = new ArrayList<>();
for (int i = str.indexOf('['), j; i != -1; i = str.indexOf('[', j + 1)) {
j = str.indexOf(']', i + 1);
// if `j` is -1, the brackets are unbalanced. Perhaps throw an Exception?
allMatches.add(str.substring(i, j + 1));
}
一行執行操作的方法如下:
String[] hits = str.replaceAll("^.*?\\[|][^\\]]*$", "").split("].*?\\[");
這是通過剝離直至和包括第一個/最后一個開/關方括號的前導和尾隨字符,然后在閉括號中拆分到下一個開括號(包括下一個)來實現的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.