やあ、私は文字列を非表示にする方法を見つけようとしましたが、私が見つけたコードは私のアプリケーションでうまく機能します...文字列内の文字をいずれかで非表示にする方法はあります*
か-
?
5 に答える
これはパスワードを作るためですか?次のことを考慮してください。
class Password {
final String password; // the string to mask
Password(String password) { this.password = password; } // needs null protection
// allow this to be equal to any string
// reconsider this approach if adding it to a map or something?
public boolean equals(Object o) {
return password.equals(o);
}
// we don't need anything special that the string doesnt
public int hashCode() { return password.hashCode(); }
// send stars if anyone asks to see the string - consider sending just
// "******" instead of the length, that way you don't reveal the password's length
// which might be protected information
public String toString() {
StringBuilder sb = new StringBuilder();
for(int i = 0; < password.length(); i++)
sb.append("*");
return sb.toString();
}
}
または絞首刑執行人のアプローチのために
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();
}
}
元の文字と同じ文字数で文字列を作成し、代わりに「わかりにくい」文字を作成します。
String x = "ABCD";
String output = "";
for (int i = 0; i < x.length(); i++) {
output += "*";
}
または、を使用することもできますx.replaceAll("\\S", "*")
。これにより、空白も保持されます。
これを実現する方法はいくつかありますが、アプリケーションによって異なります。
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
なく、通常の文字列を使用します。この場合、アスタリスクが必要な場合は、ハイフン「-」に「*」を使用します。これは非常に単純です。
@Roddy of the Frozen Pea
ここにある他のすべての方法は、とを除いてうまく機能する@djc391
ので、私は正しく答えました。
幸運を
次のようなものを簡単に実装できます。
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;
}
}
あなたはアイデアを得る:)
私の実装:
public static String maskString(String s, int x) {
int n = s.length()/x;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (n >= 1 && (i < n || i >= (s.length() - n))) {
sb.append(s.charAt(i));
}
else {
sb.append("*");
}
}
return sb.toString();
}