Entfernen Sie einen Teil der Zeichenfolge in Java

81

Ich möchte einen Teil der Zeichenfolge aus einem Zeichen entfernen, dh:

Quellzeichenfolge:

manchester united (with nice players)

Zielzeichenfolge:

manchester united
zmki
quelle
5
Woher wissen Sie, welchen Teil Sie behalten und welchen Sie wegwerfen müssen? Ohne das zu wissen, ist es unmöglich, Ihre Frage zu beantworten?
Raedwald

Antworten:

156

Es gibt mehrere Möglichkeiten, dies zu tun. Wenn Sie die Zeichenfolge haben, die Sie ersetzen möchten, können Sie die Methoden replaceoder replaceAllder StringKlasse verwenden. Wenn Sie einen Teilstring ersetzen möchten, können Sie den Teilstring über die substringAPI abrufen .

Zum Beispiel

String str = "manchester united (with nice players)";
System.out.println(str.replace("(with nice players)", ""));
int index = str.indexOf("(");
System.out.println(str.substring(0, index));

Um Inhalte innerhalb von "()" zu ersetzen, können Sie Folgendes verwenden:

int startIndex = str.indexOf("(");
int endIndex = str.indexOf(")");
String replacement = "I AM JUST A REPLACEMENT";
String toBeReplaced = str.substring(startIndex + 1, endIndex);
System.out.println(str.replace(toBeReplaced, replacement));
mprabhat
quelle
ein Tippfehler. sollte seinString toBeReplaced = str.substring(startIndex , endIndex + 1);
Yeung
Es lohnt sich auch, das Leerzeichen zu entfernen: System.out.println (str.replace ("(mit netten Spielern)", ""));
Kiedysktos
32

String ersetzen

String s = "manchester united (with nice players)";
s = s.replace(" (with nice players)", "");

Bearbeiten:

Nach Index

s = s.substring(0, s.indexOf("(") - 1);
Shawn Janas
quelle
3
nicht vergessens = s.replace(...)
Sergey Kalinichenko
Es kann nicht sein, weil sich das, was in Klammern steht, ändern kann. Ich muss die Zeichenfolge vom Zeichen ändern (
zmki
19

Verwenden Sie String.Replace ():

http://www.daniweb.com/software-development/java/threads/73139

Beispiel:

String original = "manchester united (with nice players)";
String newString = original.replace(" (with nice players)","");
Matt Cashatt
quelle
Ich war nicht der Downvoter, aber vielleicht, weil Sie Replace in den falschen Fall gebracht haben?
Mike Kwan
1
Upvoted, um die Auswirkung einer vorbeifahrenden (dh ungeklärten und anscheinend fadenscheinigen) Abstimmung zu negieren.
Gayot Fow
Es ist nicht erforderlich, dass die Zeichenfolge mit dem angegebenen Beispiel übereinstimmt. Sie können also nicht ersetzen verwenden.
Verwirren Sie den
Hier gibt es einen Leistungsvergleich. Die String-Ersetzungsmethode verwendet reguläre Ausdrücke unter der Haube. stackoverflow.com/questions/16228992/…
Igor Vuković
9
originalString.replaceFirst("[(].*?[)]", "");

https://ideone.com/jsZhSC
replaceFirst()kann durch ersetzt werdenreplaceAll()

1111161171159459134
quelle
7

Mit StringBuilder können Sie Folgendes ersetzen.

StringBuilder str = new StringBuilder("manchester united (with nice players)");
int startIdx = str.indexOf("(");
int endIdx = str.indexOf(")");
str.replace(++startIdx, endIdx, "");

quelle
6

Ich würde zuerst die ursprüngliche Zeichenfolge in ein Array von Zeichenfolgen mit einem Token "(" aufteilen und die Zeichenfolge an Position 0 des Ausgabearrays ist das, was Sie gerne hätten.

String[] output = originalString.split(" (");

String result = output[0];
Nicolas Epaminonda
quelle
5

Sie sollten die substring () -Methode des String-Objekts verwenden.

Hier ist ein Beispielcode:

Annahme: Ich gehe hier davon aus, dass Sie die Zeichenfolge bis zur ersten Klammer abrufen möchten

String strTest = "manchester united(with nice players)";
/*Get the substring from the original string, with starting index 0, and ending index as position of th first parenthesis - 1 */
String strSub = strTest.subString(0,strTest.getIndex("(")-1);
Gopal Nair
quelle
2

Verwenden von StringUtils aus Commons lang

Eine Null-Quellzeichenfolge gibt null zurück. Eine leere ("") Quellzeichenfolge gibt die leere Zeichenfolge zurück. Eine Null-Entfernungszeichenfolge gibt die Quellzeichenfolge zurück. Eine leere ("") Entfernungszeichenfolge gibt die Quellzeichenfolge zurück.

String str = StringUtils.remove("Test remove", "remove");
System.out.println(str);
//result will be "Test"
Igor Vuković
quelle
1
// Java program to remove a substring from a string
public class RemoveSubString {

    public static void main(String[] args) {
        String master = "1,2,3,4,5";
        String to_remove="3,";

        String new_string = master.replace(to_remove, "");
        // the above line replaces the t_remove string with blank string in master

        System.out.println(master);
        System.out.println(new_string);

    }
}
KIBOU Hassan
quelle
1

Wenn Sie nur alles nach dem "(" entfernen müssen, versuchen Sie dies. Tut nichts, wenn keine Klammern vorhanden sind.

StringUtils.substringBefore(str, "(");

Wenn nach den Endklammern möglicherweise Inhalt vorhanden ist, versuchen Sie dies.

String toRemove = StringUtils.substringBetween(str, "(", ")");
String result = StringUtils.remove(str, "(" + toRemove + ")"); 

Verwenden Sie zum Entfernen von Endräumen str.trim()

Apache StringUtils- Funktionen sind null-, leer- und nicht übereinstimmungssicher

Gibolt
quelle
Gute Lösung!!
Sumit Shukla
0

Sie könnten verwenden replace, um Ihre Zeichenfolge zu reparieren. Im Folgenden wird alles vor einem "(" zurückgegeben und auch alle führenden und nachfolgenden Leerzeichen entfernt. Wenn die Zeichenfolge mit einem "(" beginnt, wird sie einfach unverändert gelassen.

str = "manchester united (with nice players)"
matched = str.match(/.*(?=\()/)
str.replace(matched[0].strip) if matched
slindsey3000
quelle
Dies scheint in Java nicht zu funktionieren. Es könnte eine Ableitung von ECMAscript sein. Haben Sie eine Methode, mit der dieser Code wie in Java funktioniert?
1111161171159459134
0

Kotlin-Lösung

Wenn Sie eine bestimmte Zeichenfolge am Ende entfernen, verwenden Sie removeSuffix ( Dokumentation ).

var text = "one(two"
text = text.removeSuffix("(two") // "one"

Wenn das Suffix in der Zeichenfolge nicht vorhanden ist, wird nur das Original zurückgegeben

var text = "one(three"
text = text.removeSuffix("(two") // "one(three"

Wenn Sie nach einem Zeichen entfernen möchten, verwenden Sie

// Each results in "one"

text = text.replaceAfter("(", "").dropLast(1) // You should check char is present before `dropLast`
// or
text = text.removeRange(text.indexOf("("), text.length)
// or
text = text.replaceRange(text.indexOf("("), text.length, "")

Sie können auch überprüfen removePrefix, removeRange, removeSurrounding, und replaceAfterLastdie ähnlich

Die vollständige Liste finden Sie hier: ( Dokumentation )

Gibolt
quelle