我編寫了一個函數來檢查字符串是否包含某些單詞,但對代碼的外觀不滿意所以目前我有private String url = "validator=http://url.com;useraccount=sf4cdamloci;licence=39I8934U401;addedon=343443334;serial=7QW0-5TU8-YN9P-G4FZ;limit=123;days=10"private String musthave ="validator,useraccount,licence,addedon,serial,limit,days"所以我想檢查 url 是否包含字符串中必須包含的單詞。例如 url 必須有驗證器、用戶帳戶、許可證......所以我嘗試了以下 Boolean has_validator = false; Boolean has_licence = false; .....//others with has_ prefixString[] split_url = url.split(";")for(String key_item : split_url){ String[] splitteditem = key_item.split("="); if (splitteditem[0].equalsIgnoreCase("validator")){ has_validator = true; } if (splitteditem[0].equalsIgnoreCase("useraccount")){ has_useraccount = true; } ....others as well}然后稍后我可以輕松檢查if(has_useraccount && has_...)上述解決方案有效,但它不可擴展,因為每當我包含一個新的必須要編輯我的函數時。有沒有更好的方法來實現這一點。我還是java新手。我已經檢查了正則表達式,但我仍然可以弄清楚如何實現這一點。
2 回答

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
不要使用字符串來表示一組字符串。使用...一組字符串:Set<String>. 或者至少是一個字符串數組。
然后只需使用一個循環。如果集合中的任何單詞不包含在文本中,您可以立即返回 false。如果你從未在循環中返回 false,那么所有單詞都包含在文本中,你可以返回 true。
偽代碼:
for each word in the set
if the word is not in the text, return false
end for
return true

眼眸繁星
TA貢獻1873條經驗 獲得超9個贊
如果你有一個Collection
必備的字符串,那么你可以做一些簡單的事情,比如:
mustHave.stream().allMatch(url::contains)
我的示例沒有進行不區分大小寫的檢查,但您明白了。
添加回答
舉報
0/150
提交
取消