我想寫一個簡單的Java函數,將採取語言輸入列表,看看我從數據庫查詢獲得的匹配。我的數據庫中的所有字符串都進行了歸一化處理,以便於搜索。這是一個例子。匹配兩個字符串,其中某些文本是可選的以匹配?
研究室A想有以下任何一種語言輸入(它們是由管道字符|
分隔)參與者:
{English | English, Spanish | Spanish}
換句話說,這個實驗室可以採取參與者或者是單語英語,單語西班牙語,或雙語英語和西班牙語。這非常簡單 - 如果他們的數據庫結果返回"English"
或"English, Spanish"
或"Spanish"
,我的函數將找到一個匹配項。
然而,我的數據庫還會標記參與者是否只有某種語言的最小語言輸入(使用~
字符)。
"English, ~Spanish" = participant hears English and a little Spanish
"English, ~Spanish, Russian" = participant hears English, Russian, and a little Spanish
這是我遇到麻煩的地方。我想匹配"English, ~Spanish"
與"English"
和"English, Spanish"
。
我正在考慮刪除/隱藏標記爲~
的語言,但是如果有一個研究實驗室只需要{English, Spanish}
,那麼"English, ~Spanish"
即使應該也不會匹配。
我也想不出如何使用正則表達式來完成這項任務。任何幫助將不勝感激!
所以你的問題是你不知道你應該用什麼來匹配「英語,西班牙語」? – xvatar
不,函數需要採取任意語言輸入列表並確定查詢結果是否匹配。我只用英語和西班牙語爲例。如果我得到了輸入{Russian |英語},然後可能的匹配是:「俄語」,「英語」,「俄語,〜德語」,「俄語,〜西班牙語,〜意大利語」等。 – LeoPardus
問題是,這是一種糟糕的方式來使用正則表達式第一名。您的數據庫未正確歸一化。您不應該使用逗號分隔的多個值列表,而應該有多個單值記錄。上述的正則表達式解決方案將是a)非常複雜b)因此很難保持c)緩慢。嘗試修復你的數據庫,你可以用一個基本的SELECT語句解決這個問題。 – Tomalak