2016-03-07 78 views
1

我16歲,試圖學習Java,我有一篇論文,我的叔叔給了我那些有Java事情要做的事情。這些事情之一是過於編寫並執行一個程序,將接受一個擴展消息作爲字符串,如替換字符串中的子字符串

每次她看到這幅畫,她很高興

和替換她用字他這個詞。

每次看到這幅畫,他都很開心。

這部分很簡單,但是他希望我能夠採取任何形式的她和替換它我們他喜歡(sheheSheHeshe?he?she.he.she'he'等等)。有人可以幫我製作一個程序來完成這個任務。

我有這個

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Write Sentence"); 
    String original = keyboard.nextLine(); 
    String changeWord = "he"; 
    String modified = original.replaceAll("she", changeWord); 
    System.out.println(modified); 
} 

如果不能找到這樣的答案正確的網站,你可以重定向我,回答這些問題的一個網站?

+1

請確保您的問題的標題有你的問題的內容的一些指示匹配的模式。 – khelwood

+0

將所輸入的內容更改爲單個case,lower或upper並檢查單詞/句子是否包含「她」 –

+1

您是否嘗試過使用包含所引用的所有示例的字符串來測試程序,以查看它們中的哪些/ doesn'處理? – redbirdo

回答

1

做到這一點的最好方法是使用正則表達式(正則表達式)。正則表達式允許你匹配模式或類的單詞,所以你可以處理一般情況。想想你已經列出的情況:

(她對他,她對他,她對他?,她對他,她是對他'等等?)

什麼之間是很常見這些情況?你能想到一些適用於所有這些轉變的一般規則嗎?

還要考慮你有沒有上市的一些情況:比如,你現在已經寫好了,你的代碼會改變單詞「灰燼」,以「ahes」,因爲「一個的」包含「她「。正確編寫的正則表達式可以避免這種情況。

在深入研究正則表達式之前,試試用簡單的英語表達一個規則或一組規則,以表示要替換的內容以及應該替換的內容。

然後,learn some regex並嘗試應用這些規則。

最後,爲各種情況嘗試編寫一些測試(即使用JUnit),以便您可以查看代碼適用於哪些情況以及哪些情況下不適用。

完成此操作後,如果仍然無法正常工作,請隨時在此處發佈一個新問題,向我們展示您的代碼並解釋哪些方面無效。我們很樂意提供幫助。

1

我會推薦這個正則表達式來解決這個問題。看來你必須尋找並單獨更換大寫S和小寫s

String modified = original 
    .replaceAll("(she)(\\W)", "he$2") 
    .replaceAll("(She)(\\W)", "He$2"); 

說明:

  1. 模式(she)將匹配字she並將其存儲爲捕獲的第一組字符
  2. (\\W)將匹配一個非字母字符(例如',.)並將其存儲爲第二個捕獲的字符組
  3. 這兩個模式必須匹配replaceAll的輸入字符串的連續部分才能取代某些內容。
  4. "he$2"放得到的字符串中,隨後由第二捕獲組的字符的字he(在我們的情況下的組中只有一個字符)

上面意味着正則表達式匹配像She'll的圖案與He'll取代,但它不會像Sherlock因爲這裏She後面跟着一個字母r