2012-08-27 24 views
7

Hola, he intentado encontrar una manera de ocultar una cadena, pero el código que encontré solo funciona con mi aplicación ... ¿Hay alguna manera de ocultar los caracteres en una cadena con "*"? o "-" y si hay alguien puede explicarMáscara Cadena con caracteres

+1

¿Qué has hecho hasta ahora? – kosa

+2

¿Qué quieres decir con "esconder una cuerda"? ¿No puedes mostrar una cadena de "*" de la misma longitud que el original? ¿Solo quieres ocultar * algunos * caracteres? Contra un patrón? ¿Longitud? –

+0

Sí, como dijo Dave Newton, hay formas de reemplazar porciones de la cuerda, o toda la cuerda con lo que quieras, pero tendrás que ser más específico acerca del resultado deseado. ¿Puede darnos un ejemplo específico que muestre la cadena original y cómo desea que se encargue de su "reemplazo"? –

Respuesta

7

¿Esto es para hacer una contraseña? Considere lo siguiente:

O para el enfoque del ahorcado

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

Basta con crear una cadena con el mismo número de caracteres que el original, con el lugar de su carácter "ofuscar".

String x = "ABCD"; 

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

Como alternativa puede usar x.replaceAll("\\S", "*"), que preserve los espacios en blanco también.

+0

Debe verificar todos los caracteres en blanco y no en blanco. Entonces la expresión regular sería '[\ s \ S]' – mrres1

+0

@ mrres1 No, específicamente dije que usar 'replaceAll' con el patrón que mencioné" preservaría el espacio en blanco ". Es decir, solo reemplazaría los caracteres que no sean espacios en blanco con un asterisco. Así que "hola mundo" se convertiría en "***** *****". La expresión regular que proporcionó no conservará el espacio en blanco. –

+0

La pregunta es "¿Hay alguna manera de ocultar los caracteres en una cadena con" * "o" - "y si hay alguien puede explicar" – mrres1

1

Desde aquí se puede implementar algo como esto:

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; 
    } 
} 

Usted consigue la idea :)

1

Hay varias maneras de lograr esto, que dependerá de su aplicación.

Si desea enmascarar todos los caracteres con otro personaje de una sola vez, puede usar el método 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).

Esto implica el uso de expresiones regulares, para regex usaría [\s\S] que coincidirá con cualquier espacio en blanco o carácter no en blanco. Para replacement, usa una cadena normal, no un RegEx. En este caso, si quería un asterisco, use "*", para guión "-", muy simple.

Todos los demás métodos aquí funcionan bien, excepto los @Roddy of the Frozen Pea y @djc391, por eso es por eso que respondí correctamente.

Buena suerte

Cuestiones relacionadas