Reemplazar todas las letras de una cadena menos la primera y la última en Java

Tengo una cadena, por ejemplo esta:

stackoverflow

Y me gustaría obtener el siguiente resultado en Java (Android):

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

Por lo tanto, conservamos la primera y la última letra, pero las otras se reemplazan por este signo "*". Quiero que la longitud de la cadena sea la misma desde la entrada hasta la salida.

Aquí está el código de la función que tengo ahora.

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

Puedo obtener la primera y la última letra, pero realmente no sé cómo poner el "*" en el medio de la palabra. Sé que podría recorrerlo, pero obviamente no es una buena solución.

Respuesta 1

En una línea regex puedes hacer:

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

Demo de RegEx

\B es una aserción de ancho cero que coincide con las posiciones donde \b no coincide. Eso significa que coincide con cada letra, excepto la primera y la última.

Respuesta: 2

Si la cadena también puede contener puntuación, intente:

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

Las búsquedas aseguran que no se encuentre al inicio o al final ( demostración de regex101 ).

Respuesta: 3
char[] charArr = username.toCharArray();
for (int i=1;i<charArr.length - 1;i++) {
  charArr[i] = 'x';

}
username = new String(charArr);
Respuesta: 4

Tratar

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

¿Es posible que Eclipse cree un nuevo conjunto de trabajo con todos los archivos abiertos en el editor actual (Java)? Por lo que puedo decir, la única forma de hacer esto es seleccionar manualmente cada archivo en ...

Tengo una vista de desplazamiento en mi actividad, cuando presiono un botón, la vista se desplaza hacia abajo a una ID específica en la vista. Después de buscar aquí, encontré que puedo usar este código scrollView.post (nuevo Runnable () ...

¿Alguien sabe cómo cambiar el color del botón? pero un botón en particular, no todos los botones de la aplicación que usan XML. El atributo android: backgroundTint no funciona en pre-Lollipop ...

Me gusta usar la función del editor Java de Eclipse que me permite dividir la ventana del editor en varios paneles para poder ver varios archivos a la vez. A menudo, el diseño de las divisiones es el contexto ...