Comment puis-je supprimer une sous-chaîne d'une chaîne donnée?

190

Existe-t-il un moyen simple de supprimer une sous-chaîne d'une donnée Stringen Java?

Exemple "Hello World!":, suppression "o""Hell Wrld!"

Belgique
la source

Réponses:

369

Vous pouvez facilement utiliser String.replace():

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

Vous pouvez utiliser StringBuffer

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

Découvrez Apache StringUtils :

  • static String replace(String text, String searchString, String replacement) Remplace toutes les occurrences d'une chaîne dans une autre chaîne.
  • static String replace(String text, String searchString, String replacement, int max) Remplace une chaîne par une autre chaîne dans une chaîne plus grande, pour les premières valeurs maximales de la chaîne de recherche.
  • static String replaceChars(String str, char searchChar, char replaceChar) Remplace toutes les occurrences d'un caractère dans une chaîne par une autre.
  • static String replaceChars(String str, String searchChars, String replaceChars) Remplace plusieurs caractères dans une chaîne en une seule fois.
  • static String replaceEach(String text, String[] searchList, String[] replacementList) Remplace toutes les occurrences de chaînes dans une autre chaîne.
  • static String replaceEachRepeatedly(String text, String[] searchList, String[] replacementList) Remplace toutes les occurrences de chaînes dans une autre chaîne.
  • static String replaceOnce(String text, String searchString, String replacement) Remplace une fois une chaîne par une autre chaîne à l'intérieur d'une chaîne plus grande.
  • static String replacePattern(String source, String regex, String replacement) Remplace chaque sous-chaîne de la chaîne source qui correspond à l'expression régulière donnée par le remplacement donné à l'aide de l'option Pattern.DOTALL.
DwB
la source
1
Je viens de comparer le replacePattern et il est 6 fois plus lent que l'exécution de code Java personnalisé.
Alex Arvanitidis
6
replace('regex', 'replacement');
replaceAll('regex', 'replacement');

Dans votre exemple,

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

Cela fonctionne bien pour moi.

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

ou vous pouvez utiliser

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

Vous devriez avoir à regarder StringBuilder/StringBufferce qui vous permet de supprimer, insérer, remplacer des caractères à un décalage spécifié .

adatapost
la source
1
replaceAll(String regex, String replacement)

La méthode ci-dessus aidera à obtenir la réponse.

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

Vous pouvez également utiliser Substring pour le remplacer par une chaîne existante:

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

Voici l'implémentation pour supprimer toutes les sous-chaînes de la chaîne donnée

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

L'implémentation de la méthode isSubstring () est ici

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

Au cas où vous auriez une logique compliquée pour filtrer le caractère, juste une autre façon au lieu de replace().

Sean
la source
0

Si vous connaissez l'index de début et de fin, vous pouvez utiliser ce

string = string.substring(0, start_index) + string.substring(end_index, string.length());
Dur
la source