¿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!"

Belgi
fuente

Respuestas:

369

Podrías usar fácilmente String.replace():

String helloWorld = "Hello World!";
String hellWrld = helloWorld.replace("o","");
Justin Niessner
fuente
9

Puedes usar StringBuffer

StringBuffer text = new StringBuffer("Hello World");
text.replace( StartIndex ,EndIndex ,String);
Magdi
fuente
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.
DwB
fuente
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", "");
Cory Kendall
fuente
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", "");
Tariqul
fuente
3

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

Adatapost
fuente
1
replaceAll(String regex, String replacement)

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

String check = "Hello World";
check = check.replaceAll("o","");
OneSix
fuente
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);
Debashish Dwivedi
fuente
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í

Pratik Patil
fuente
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().

Sean
fuente
0

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

string = string.substring(0, start_index) + string.substring(end_index, string.length());
Duro
fuente