2016-02-16 49 views
0

我試圖從字符串遵循此規則的末尾刪除字母「s」:正則表達式不是取代所需的字符串

必須有一個元音某處字,是不是在第二次最後的位置。在字符串中的倒數第二個位置可以有一個元音,但如果只有元音處於倒數第二個位置,則不會刪除「s」。

例如:

氣體 - >不會得到改變,因爲只有元音「a」是在位置上的「S」

玩具之前,右鍵 - >將成爲「玩具」

例子 - >例子,因爲在s之前的單詞中有一個元音(e,a),而不僅僅是倒數第二個位置。

現在我有叫Tokenizer.java

public String remove(String word){ 

     //replace any words that end with s if the preceding word part contains a vowel not immediately before the 's'                     
     word.replaceAll("(?i)([aeiou][a-z]*[a-rt-z])s\\b", "$1"); 

     return word; 
} 

類類中的方法,我調用此方法在我tester.java類 包標記生成器;

public class Tester { 

    public static void main(String[] args) { 

     String word = token.deleteS("causes"); 
     System.out.println(word); 
     word = token.remove("examples"); 
     System.out.println(word); 
     word = token.deleteS("toys"); 
     System.out.println(word); 
     word = token.deleteS("gas"); 
     System.out.println(word); 

    } 

} 

我的輸出:

causes 
examples 
toys 
gas 

預期輸出:

cause 
example 
toy 
gas 

我遇到的問題是,當我測試了這個regex 101 link,我看到它的工作。爲什麼它在java中的行爲不同?

回答

1

你應該

word = word.replaceAll("(?i)([aeiou][a-z]*[a-rt-z])s\\b", "$1"); 

替換下面一行在你的方法

word.replaceAll("(?i)([aeiou][a-z]*[a-rt-z])s\\b", "$1");  

或刪除它,然後離開這個作爲函數體

return word.replaceAll("(?i)([aeiou][a-z]*[a-rt-z])s\\b", "$1"); 

字符串函數的方法沒有按」 t影響字符串本身只是返回結果爲字符串所以你需要通過將其分配到相同或新的變量

+0

謝謝。對我來說非常愚蠢的監督。一直在這個太久。 – Anderology

0

攔截這個新的字符串試試這個:

public String remove(String word){ 

     return word.replaceAll("(?i)([aeiou][a-z]*[a-rt-z])s\\b", "$1"); 

} 
相關問題