這取決於stringArray
是什麼。如果這是一個Collection
那麼罰款。如果它是一個真正的數組,你應該使它成爲Collection
。 Collection
接口有一個名爲contains()
的方法,該方法將確定給定的Object
是否在Collection
中。
簡單辦法把陣列到Collection
:
String tokens[] = { ... }
List<String> list = Arrays.asList(tokens);
問題與List
是查找是昂貴(技術上線性或O(n)
)。更好的選擇是使用Set
,它是無序的,但接近常數(O(1)
)查找。您可以構建一個這樣的:
從Collection
:
Set<String> set = new HashSet<String>(stringList);
從一個數組:
Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
然後set.contains(line)
將是一個廉價的操作。
編輯:好的,我認爲你的問題不清楚。您想要查看該行是否包含數組中的任何單詞。你想那麼什麼是這樣的:
BufferedReader in = null;
Set<String> words = ... // construct this as per above
try {
in = ...
while ((String line = in.readLine()) != null) {
for (String word : words) {
if (line.contains(word)) [
// do whatever
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) { try { in.close(); } catch (Exception e) { } }
}
這是一個相當粗糙檢查,這是令人驚訝的使用公開,往往給像「廢」字令人討厭的誤報。對於更復雜的解決方案,您可能需要使用正則表達式查找單詞邊界:
Pattern p = Pattern.compile("(?<=\\b)" + word + "(?=\b)");
Matcher m = p.matcher(line);
if (m.find() {
// word found
}
你可能會想這樣做更有效率(如不編譯與每一行的模式),但是這是最基本的工具使用。
糾正我,如果我錯了,請不要檢查,看看數組是否包含從文件中讀取的行,而不是檢查行是否包含數組中的一個字符串? – karunga 2009-11-04 08:49:05
你是絕對正確的;看到我的編輯更好的解決方案。 – 2009-11-04 08:56:32
正則表達式然後依賴於字符串數組的內容。可能被視爲安全漏洞,具體取決於您檢查的條件。 – 2009-11-04 09:06:12