2014-10-17 209 views
-2

我想製作一個程序,用「#!」審查單詞「dang」。我的主要方法傳入一個字符串句子。無法用Java替換方法代替

public static String deleteDang(String sentence) 
    /* pre: receives the sentence to be censored 
     post: returns the censored sentence*/ 
    { 
     while(((sentence.toLowerCase()).contains("dang"))) 
     { 
      sentence = (sentence.toLowerCase()).replace("dang", "#!"); 
     } 
     return sentence; 
    } 

我想這是工作,所以我可以進入一些諸如「DANG蘋果」而獲得的輸出「!#蘋果」。當我嘗試運行這個時,如果我輸入「dang apple」,輸出「!#apple」,但是當我放入「DANG Apple」時,我有「DANG Apple」的無限輸出。我究竟做錯了什麼?

如果可能的話,我想這不使用.replaceAll

+0

我沒有看到你輸出任何東西。這發生在哪裏? – 2014-10-17 03:14:27

+0

另外,你爲什麼期望''dang''替換''DANG Apple''中的任何東西? – 2014-10-17 03:16:08

回答

4

您可以使用不區分大小寫的正則表達式,例如...

String sentance = "Dang the dang and DANG and I don't mind a dANg"; 
sentance = sentance.replaceAll("(?i)dang", "#!"); 
System.out.println(sentance); 

這將輸出類似...

#! the #! and #! and I don't mind a #! 

更新基於意見

沒有使用replaceAll的能力,你將不得不拆分String段,一個辦法是遍歷在String,修剪掉了 「宕」 S和建設,從一個新的String,例如...

String sentance = "Dang the dang and DANG and I don't mind a dANg and some more"; 

StringBuilder sb = new StringBuilder(sentance.length()); 
while (sentance.toLowerCase().contains("dang")) { 

    int index = sentance.toLowerCase().indexOf("dang"); 
    String start = sentance.substring(0, index); 
    int endIndex = index + "dang".length(); 
    sb.append(start); 
    sb.append("#!"); 

    sentance = sentance.substring(endIndex); 

} 

sb.append(sentance); 

System.out.println(sb.toString()); 

更新

你可以使用不區分大小寫的正則表達式和String#split這將打破String繞成表達一個數組,那麼您需要能夠重建這些地區的String ...

String sentance = "Bang Dang the dang and DANG and I don't mind a dANg and some more"; 
String[] split = sentance.split("(?i)dang"); 
StringBuilder sb = new StringBuilder(sentance.length()); 
for (int index = 0; index < split.length - 1; index++) { 
    String part = split[index]; 
    System.out.println("[" + part + "] " + part.trim().isEmpty()); 
    if (!part.trim().isEmpty()) { 
     sb.append(part).append("#!"); 
    } else { 
     sb.append("#!"); 
    } 
} 
// Put the last value at the end, so we don't end up with #! at the end of the String 
sb.append(split[split.length - 1]); 

System.out.println(sb.toString()); 

我沒有做任何範圍檢查(檢查是否有足夠的零件返回),所以你將需要做你自己的測試,但那裏的想法...

+0

有沒有一種方法可以通過迭代來實現?我想了解這個課程,我的老師不希望我們使用.replaceAll。 – gmitra 2014-10-17 03:33:55

+0

@gmitra檢查更新 – MadProgrammer 2014-10-17 03:51:52

+0

非常感謝!第一次更新非常有用,現在我明白了。 – gmitra 2014-10-17 03:55:34

0

您不必重複。你可以只用replaceAll方法

sentence = sentence.replaceAll("dang", "#!"); 

這隻會考慮確切的「黨」字

如果要更換所有宕詞,而不考慮的情況下 那麼你可以嘗試

sentence = sentence.replaceAll("(?!)dang", "#!"); 
+0

但是,如果可行的話,我會很危險;) – MadProgrammer 2014-10-17 03:16:37