2012-10-30 258 views
-2

我的工作在我的COM的類一個任務,需要我創造的財富遊戲的車輪。我目前正在研究getDisplayedPhrase方法,我將解釋。因此,對於這個節目,我有例如
"this is a question, thanks for helping!"
隨機句話我想這句話改爲
"**** ** * ********, ****** *** *******!"
這句話應該怎麼看起來像他們想它。正如你所看到的,我想只改變字母,所以我創建了一個代替某些字符的字符串

private static final String alpha ="abcdefghijklmnopqrstuvwxyz" 

,以避免任何標點符號。 這是我到目前爲止有:

public String getDisplayedPhrase() { 
    for (int i = 0; i<secretPhrase.length(); i++){ 
     I don't know what to put here and what method to use??? 
       I'm thinking of using charAt() or indexOf() 
    } 
    return displayedPhrase; 
} 
+6

而不是說我不知道​​,拿一個飛躍,並嘗試使用的charAt()和的indexOf(),然後會被卡住。 – Arham

回答

3

您可以使用字符類來確定一個字符是字母。

String s = "this is a question, thanks for helping!"; 
      StringBuilder rep=""; 
      for(int i=0; i<s.length();i++){ 
       if(Character.isAlphabetic(s.charAt(i))){ 
        rep.append("*"); 
       } 
       else { 
        rep.append(s.charAt(i)); 
       } 
      } 
      System.out.println(rep); 

您還可以使用String.replace()並替換現有的字符串,而不是額外的新的String的

for(int i=0; i<s.length();i++){ 
      if(Character.isAlphabetic(s.charAt(i))){ 
       s=s.replace(s.charAt(i), '*'); 
      } 

     } 
     System.out.println(s); 

輸出:

**** ** * ********, ****** *** *******! 
+0

這就造成數十不必要的臨時字符串,使用StringBuilder – jozefg

+0

@jozefg真的,只是它編輯感謝.. :)顯示非正則表達式的答案,因爲它是什麼OP居然問起 – PermGenError

+1

好主意。 :) –

6
return secretPhrase.replaceAll("[a-zA-Z]","*") 
+0

或'\ w'如果0-9也要被轉換。 – Adam

+1

爲讀者練習 - 延伸以應付重音字符 - 'lesdégâtssur laCôteest envidéo'將變成** ** ** ** ** ** ** ** ** ** * *é**'使用'\ w' – DNA

+0

Java正則表達式對本地化的支持很差。 [鏈接](http://stackoverflow.com/questions/4304928/unicode-equivalents-for-w-and-b-in-java-regular-expressions) –

2
Pattern letterDigitPattern = Pattern.compile([a-zA-Z0-9]); 
public String getDisplayedPhrase() { 
    Matcher m = letterDigitPattern.matcher(secretPhrase); 
    return m.replaceAll("*"); 
} 
+0

這是不必要的冗長,看到Clints回答 – jozefg

+0

它還幫助提問者不必要地瞭解什麼是速記replaceAll,並找到相關的不必要的API文檔。哎呀! –

+0

超詳細。 downvote – Rezigned