¿Cómo puedo eliminar una subcadena de una cadena determinada?


190

¿Hay una manera fácil de eliminar una subcadena de un determinado Stringen Java?

Ejemplo: "Hello World!"eliminar "o""Hell Wrld!"

Respuestas:



9

Puedes usar StringBuffer

StringBuffer text = new StringBuffer("Hello World");
text.replace( StartIndex ,EndIndex ,String);

8

Echa un vistazo a Apache StringUtils :

  • static String replace(String text, String searchString, String replacement) Reemplaza todas las ocurrencias de una Cadena dentro de otra Cadena.
  • static String replace(String text, String searchString, String replacement, int max) Reemplaza una cadena por otra cadena dentro de una cadena más grande, para los primeros valores máximos de la cadena de búsqueda.
  • static String replaceChars(String str, char searchChar, char replaceChar) Reemplaza todas las ocurrencias de un personaje en una Cadena por otra.
  • static String replaceChars(String str, String searchChars, String replaceChars) Reemplaza varios caracteres en una cadena de una vez.
  • static String replaceEach(String text, String[] searchList, String[] replacementList) Reemplaza todas las apariciones de cadenas dentro de otra cadena.
  • static String replaceEachRepeatedly(String text, String[] searchList, String[] replacementList) Reemplaza todas las apariciones de cadenas dentro de otra cadena.
  • static String replaceOnce(String text, String searchString, String replacement) Reemplaza una Cadena con otra Cadena dentro de una Cadena más grande, una vez.
  • static String replacePattern(String source, String regex, String replacement) Reemplaza cada subcadena de la Cadena de origen que coincide con la expresión regular dada con el reemplazo dado usando la opción Pattern.DOTALL.

1
Simplemente comparé el replacePattern y es 6 veces más lento que ejecutar código Java personalizado.
Alex Arvanitidis

6
replace('regex', 'replacement');
replaceAll('regex', 'replacement');

En tu ejemplo

String hi = "Hello World!"
String no_o = hi.replaceAll("o", "");

4

Esto funciona bien para mi.

String hi = "Hello World!"
String no_o = hi.replaceAll("o", "");

o puedes usar

String no_o = hi.replace("o", "");

3

Debería tener en cuenta StringBuilder/StringBuffercuáles le permiten eliminar, insertar, reemplazar caracteres en el desplazamiento especificado .



1
replaceAll(String regex, String replacement)

El método anterior ayudará a obtener la respuesta.

String check = "Hello World";
check = check.replaceAll("o","");

1

Puede usar Substring también para reemplazar con una cadena existente:

var str = "abc awwwa";
var Index = str.indexOf('awwwa');
str = str.substring(0, Index);

0

Aquí está la implementación para eliminar todas las subcadenas de la cadena dada

public static String deleteAll(String str, String pattern)
{
    for(int index = isSubstring(str, pattern); index != -1; index = isSubstring(str, pattern))
        str = deleteSubstring(str, pattern, index);

    return str;
}

public static String deleteSubstring(String str, String pattern, int index)
{
    int start_index = index;
    int end_index = start_index + pattern.length() - 1;
    int dest_index = 0;
    char[] result = new char[str.length()];


    for(int i = 0; i< str.length() - 1; i++)
        if(i < start_index || i > end_index)
            result[dest_index++] = str.charAt(i);

    return new String(result, 0, dest_index + 1);
}

La implementación del método isSubstring () está aquí


0
private static void replaceChar() {
    String str = "hello world";
    final String[] res = Arrays.stream(str.split(""))
            .filter(s -> !s.equalsIgnoreCase("o"))
            .toArray(String[]::new);
    System.out.println(String.join("", res));
}

En caso de que tenga alguna lógica complicada para filtrar el carácter, solo otra forma en lugar de replace().


0

Si conoce el índice inicial y final, puede usar esto

string = string.substring(0, start_index) + string.substring(end_index, string.length());
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.