2012-08-27 34 views
7

嘿傢伙的我試圖找到一種方法來隱藏一個字符串,但我發現的代碼只是與我的應用程序一起工作...有沒有辦法隱藏字符中的字符與「*」或「 - 」,如果有人可以請解釋一下面具字符串與字符

+1

你到目前爲止做了什麼? – kosa

+2

你是什麼意思,「隱藏一個字符串」?你不能只顯示一個與原始長度相同的「*」字符串嗎?你只想隱藏*一些*字符?反對一種模式?長度? –

+0

是的,正如Dave Newton所說的,可以用任何你想要的方法來替換字符串的一部分或者整個字符串,但是你必須對你期望的結果更具體。你能否給我們一個具體的例子,顯示原始字符串,以及你希望它在'替換'後的樣子。 –

回答

7

這是做密碼嗎?考慮以下幾點:

或爲劊子手方法

class Hangman { 
    final String word; 
    final BitSet revealed; 
    public Hangman(String word) { 
     this.word = word; 
     this.revealed = new BitSet(word.length()); 
     reveal(' '); 
     reveal('-'); 
    } 
    public void reveal(char c) { 
     for(int i = 0; i < word.length; i++) { 
      if(word.charAt(i) == c) revealed.set(i); 
     } 
    } 
    public boolean solve(String guess) { 
     return word.equals(guess); 
    } 
    public String toString() { 
     StringBuilder sb = new StringBuilder(word.length()); 
     for(int i = 0; i < word.length; i++) { 
      char c = revealed.isSet(i) ? word.charAt(i) : "*"; 
     } 
     return sb.toString(); 
    } 
} 
3

只需創建一個具有相同數目的字符作爲您的原始的字符串,而不是你的「混淆」字。

String x = "ABCD"; 

String output = ""; 
for (int i = 0; i < x.length(); i++) { 
    output += "*"; 
} 

或者,您也可以使用x.replaceAll("\\S", "*"),這也將保留空白。

+0

這樣的事情您需要檢查所有空格和非空白字符。所以正則表達式應該是'[\ s \ S]' – mrres1

+0

@ mrres1不,我特別說過,在我提到的模式中使用'replaceAll'將會保留空格。也就是說,只會用星號替換非空白字符。所以「你好世界」會變成「***** *****」。你提供的正則表達式不會保留空白。 –

+0

問題是「有沒有方法可以隱藏字符串中帶有」*「或」 - 「的字符,如果有人可以請解釋」 – mrres1

1

你可以很容易地實現這樣的事情:

public class MaskedString 
{ 
    private String data; 

    public MaskedString(String data){this.data = data;} 
    public void append(char c){data += c;} 
    public void setData(String data){this.data = data;} 

    public String getMasked() 
    { 
     StringBuilder sb = new StringBuilder(); 
     for(int i=0; i<data.length(); i++) 
      sb.append('*'); 
     return sb.toString(); 
    } 

    public String getString() 
    { 
     return data; 
    } 
} 

你的想法:)

1

有幾種方法來實現這一目標,這將取決於你的應用程序。

如果你想用一個字符一舉掩蓋所有字符,你可以使用String#replaceAll(String regex, String replacement)方法:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)

這涉及到使用正則表達式,對於regex,您將使用[\s\S],它將匹配任何空格或非空白字符。對於replacement,您使用常規字符串,而不是RegEx。在這種情況下,如果你想要星號,使用「*」作爲連字符「 - 」,非常簡單。

除了@Roddy of the Frozen Pea@djc391之外,其他所有方法都可以很好地工作,所以這就是我正確回答的原因。

祝你好運