Como posso remover uma substring de uma determinada String?

190

Existe uma maneira fácil de remover substring de um dado Stringem Java?

Exemplo: "Hello World!"removendo "o""Hell Wrld!"

Belgi
fonte

Respostas:

369

Você pode facilmente usar String.replace():

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

Você pode usar StringBuffer

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

Confira o Apache StringUtils :

  • static String replace(String text, String searchString, String replacement) Substitui todas as ocorrências de uma String dentro de outra String.
  • static String replace(String text, String searchString, String replacement, int max) Substitui uma String por outra String dentro de uma String maior, pelos primeiros valores máximos da String de pesquisa.
  • static String replaceChars(String str, char searchChar, char replaceChar) Substitui todas as ocorrências de um caractere em uma String por outra.
  • static String replaceChars(String str, String searchChars, String replaceChars) Substitui vários caracteres em uma String de uma só vez.
  • static String replaceEach(String text, String[] searchList, String[] replacementList) Substitui todas as ocorrências de Strings dentro de outra String.
  • static String replaceEachRepeatedly(String text, String[] searchList, String[] replacementList) Substitui todas as ocorrências de Strings dentro de outra String.
  • static String replaceOnce(String text, String searchString, String replacement) Substitui uma String por outra String dentro de uma String maior, uma vez.
  • static String replacePattern(String source, String regex, String replacement) Substitui cada substring da String de origem que corresponde à expressão regular especificada pela substituição especificada usando a opção Pattern.DOTALL.
DwB
fonte
1
Apenas comparou o replacePattern e é 6x mais lento que a execução do código Java personalizado.
Alex Arvanitidis
6
replace('regex', 'replacement');
replaceAll('regex', 'replacement');

No seu exemplo,

String hi = "Hello World!"
String no_o = hi.replaceAll("o", "");
Cory Kendall
fonte
4

Isso funciona bem para mim.

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

ou você pode usar

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

Você deve examinar StringBuilder/StringBufferquais permitem excluir, inserir, substituir caracteres no deslocamento especificado .

adatapost
fonte
1
replaceAll(String regex, String replacement)

O método acima ajudará a obter a resposta.

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

Você pode usar Substring também para substituir por uma string existente:

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

Aqui está a implementação para excluir todas as substrings da string especificada

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

A implementação do método isSubstring () está aqui

Pratik Patil
fonte
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));
}

Caso você tenha alguma lógica complicada para filtrar o caractere, apenas outra maneira em vez de replace().

Sean
fonte
0

Se você conhece o índice inicial e final, pode usar este

string = string.substring(0, start_index) + string.substring(end_index, string.length());
Harsh
fonte