2012-08-27 30 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

これを達成するために、いくつかの方法がありますが、それはあなたのアプリケーションに依存します。

あなたが1つの別の文字ですべての文字をマスクしたい場合は、の方法を使用することができます: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を除いて、他のすべての方法がうまく機能するため、正しく回答しています。

幸運