2017-07-28 73 views
0

我正在構建一個自動翻譯Java中布爾查詢的小應用程序。Java:在替換循環中的字符串時出現問題

這是查找查詢字符串是否包含某個單詞的代碼,如果是,則用替換後的值與翻譯後的值進行比較。

int howmanytimes = originalValues.size(); 

for (int y = 0; y < howmanytimes; y++) { 
    String originalWord = originalValues.get(y); 
    System.out.println("original Word = " + originalWord); 

    if (toReplace.contains(" " + originalWord.toLowerCase() + " ") 
     || toCheck.contains('"' + originalWord.toLowerCase() + '"')) { 
     toReplace = toReplace.replace(originalWord, translatedValues.get(y).toLowerCase()); 
     System.out.println("replaced " + originalWord + " with " + translatedValues.get(y).toLowerCase()); 
    } 

    System.out.println("to Replace inside loop " + toReplace); 
} 

問題是,當一個查詢有,例如,「(mykeyword OR‘藍色mykeyword’)」和轉換後的值是不同的,例如,mykeyword 轉化爲 elpalavra和「藍mykeyword」 翻譯爲「elpalavra azul」。在這種情況下會發生什麼情況是,當它應該是'(elpalavra OR「elpalavra azul」)'時,結果字符串將是'(elpalavra OR「藍色elpalavra」)'。我明白,在第一個循環中,它會替換所有關鍵字,並在第二個循環中不再包含它應該翻譯的原始值。 我該如何解決這個問題?

謝謝

+0

一種方法是將其全部分割成一個數組,然後循環遍歷數組,如果找到關鍵字,則轉換它,否則跳過它。 –

+0

爲什麼在形成查詢之後而不是之前做翻譯? –

+0

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/StrSubstitutor.html可能是一個很好的方法來做到這一點 – 2017-07-28 11:31:00

回答

1

您可以按size desc對originalValues進行排序。之後通過它們循環。 這樣你首先替換「藍色mykeyword」,並且只有在你替換「mykeyword」之後

0

「toCheck」變量沒有被解釋爲什麼,在任何情況下它的使用方式看起來都很奇怪(對我來說至少對我來說)。的是,除了,爲了回答你的要求的一種方式可以此(僅基於您指定的要求)

飼養:

  1. 排序您originalValues,讓更多的話的人是第一次。那些詞數相同的詞應該從更多的長度開始排序。