2015-06-08 10 views
5

ho una stringa, ad esempio questo:Sostituire tutte le lettere di una stringa meno il primo e l'ultimo in Java

stackoverflow 

E mi piacerebbe avere il seguente output in Java (Android):

s***********w 

Quindi manteniamo la prima e l'ultima lettera ma le altre sono sostituite da questo segno "*". Voglio che la lunghezza della stringa sia la stessa dall'input all'output.

Ecco il codice della funzione che ho ora.

String transform_username(String username) 
{ 
    // Get the length of the username 
    int username_length = username.length(); 

    String first_letter = username.substring(0, 1); 
    String last_letter = username.substring(username_length - 1); 

    String new_string = ""; 

    return new_string; 
} 

io sono in grado di ottenere la prima e l'ultima lettera, ma io non so davvero come mettere il "*" nel mezzo della parola. So che potrei ricollegarlo, ma ovviamente non è una buona soluzione.

+1

Non si dovrebbe preoccupare ora di una soluzione "cattiva". Poiché questa attività non è complicata, è necessario implementare la soluzione per vedere come funziona. Dopodiché puoi trovare modi avanzati/migliori per risolvere quel compito. – Tom

risposta

8

In una linea di espressione regolare si può fare:

String str = "stackoverflow"; 
String repl = str.replaceAll("\\B\\w\\B", "*"); 
//=> s***********w 

RegEx Demo

\B è zero-width affermazione che corrisponde posizioni in cui \b non corrisponde. Ciò significa che corrisponde a tutte le lettere tranne il primo e l'ultimo.

2
char[] charArr = username.tocharArray(); 
for (int i=1;i<charArr.length - 1;i++) { 
    charArr[i] = 'x'; 

} 
username = new String(charArr); 
1

Prova

String ast = "*"; 
String new_string = first_letter + StringUtils.repeat(ast, username_length-2) + last_letter; 
+2

Credo che tu intenda "StringUtils.repeat (ast, username_length-2)" invece di "ast.repeat (username_length-2)". – goncalotomas

+0

grazie Aprendiz L'ho modificato – LSA

+1

Bene, 'StringUtils' è una libreria di terze parti. Non è la soluzione migliore però. – Mordechai

0

ottenere il primo e l'ultima lettera in due variabili stringa e '*' in un var stringa. e loop da 1 a length-2 e append * in una variabile. Quindi finalmente aggiungere tutti e tre.

0

Se la stringa può contenere anche la punteggiatura prova:

str = str.replaceAll("(?!^).(?!$)","*"); 

La lookarounds assicurare di non essere a inizio o fine (regex101 demo).

Problemi correlati