Usuń część ciągu w Javie


81

Chcę usunąć część ciągu z jednego znaku, czyli:

Ciąg źródłowy:

manchester united (with nice players)

Ciąg docelowy:

manchester united

5
Skąd wiesz, którą część zachować, a którą odrzucić? Nie wiedząc o tym, nie możesz odpowiedzieć na Twoje pytanie?
Raedwald

Odpowiedzi:


156

Można to zrobić na wiele sposobów. Jeśli masz ciąg, który chcesz zastąpić można użyć replacelub replaceAllmetod Stringklasy. Jeśli chcesz zamienić podciąg, możesz go uzyskać za pomocą substringinterfejsu API.

Na przykład

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

Aby zamienić zawartość w „()”, możesz użyć:

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

pewna literówka. powinno byćString toBeReplaced = str.substring(startIndex , endIndex + 1);
Yeung,

też warto by było usunąć spację: System.out.println (str.replace ("(z fajnymi odtwarzaczami)", ""));
kiedysktos

32

Zastąp ciąg

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

Edytować:

Według indeksu

s = s.substring(0, s.indexOf("(") - 1);

3
nie zapomnijcies = s.replace(...)
Sergey Kalinichenko

Nie może być, bo to, co jest w nawiasach, może się zmienić. Muszę zmienić ciąg znaków ze znaku (
zmki

19

Użyj String.Replace ():

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

Przykład:

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

Nie byłem przeciwnikiem, ale może dlatego, że umieściłeś Replace w złym przypadku?
Mike Kwan

1
Głosowano za, aby zanegować efekt przegłosowania (tj. Niewyjaśnionego i pozornie fałszywego) głosowania negatywnego.
Gayot Fow

Nie jest konieczne, aby ciąg był taki sam jak w podanym przykładzie. Więc nie możesz użyć zamiany.
Zmieszaj

Jest tutaj porównanie wydajności, metoda zamiany ciągów używa wyrażenia regularnego pod maską. stackoverflow.com/questions/16228992/…
Igor Vuković


7

Używając StringBuilder , możesz zastąpić następujący sposób.

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

6

Najpierw podzieliłbym oryginalny ciąg na tablicę String z tokenem „(”, a String na pozycji 0 tablicy wyjściowej jest tym, co chciałbyś mieć.

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

String result = output[0];

5

Należy użyć metody substring () obiektu String.

Oto przykładowy kod:

Założenie: Zakładam tutaj, że chcesz pobrać ciąg do pierwszego nawiasu

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

2

Używanie StringUtils z commons lang

Łańcuch źródłowy o wartości null zwróci wartość null. Pusty („”) ciąg źródłowy zwróci pusty ciąg. Łańcuch do usunięcia o wartości null zwróci ciąg źródłowy. Pusty („”) ciąg usuwania zwróci ciąg źródłowy.

String str = StringUtils.remove("Test remove", "remove");
System.out.println(str);
//result will be "Test"

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

    }
}

1

Jeśli chcesz tylko usunąć wszystko po „(”, spróbuj tego. Nie robi nic, jeśli nie ma nawiasów).

StringUtils.substringBefore(str, "(");

Jeśli po nawiasach końcowych może znajdować się treść, spróbuj tego.

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

Aby usunąć spacje końcowe, użyj str.trim()

Funkcje Apache StringUtils są null-, empty- i no match-safe


Dobre rozwiązanie!!
Sumit Shukla

0

Możesz użyć, replaceaby naprawić swój ciąg. Poniższe polecenie zwróci wszystko przed „(”, a także usunie wszystkie początkowe i końcowe białe znaki. Jeśli ciąg znaków zaczyna się od „(”, pozostawi go bez zmian.

str = "manchester united (with nice players)"
matched = str.match(/.*(?=\()/)
str.replace(matched[0].strip) if matched

Wydaje się, że to nie działa w Javie. Może być pochodną ECMAscript. Czy masz jakąś metodę, aby ten kod działał tak, jak w Javie?
1111161171159459134

0

Rozwiązanie Kotlin

Jeśli usuwasz określony ciąg z końca, użyj removeSuffix ( Dokumentacja )

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

Jeśli sufiks nie istnieje w ciągu, po prostu zwraca oryginał

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

Jeśli chcesz usunąć po znaku, użyj

// 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, "")

Można również sprawdzić removePrefix, removeRange, removeSurrounding, ireplaceAfterLast które są podobne

Pełna lista znajduje się tutaj: ( Dokumentacja )

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.