Видаліть частину рядка в Java


81

Я хочу видалити частину рядка з одного символу, тобто:

Вихідний рядок:

manchester united (with nice players)

Цільовий рядок:

manchester united

5
Звідки ви знаєте, яку частину зберегти, а яку відкинути? Не знаючи цього, неможливо відповісти на ваше запитання?
Raedwald

Відповіді:


156

Існує кілька способів зробити це. Якщо у вас є рядок, який ви хочете замінити, ви можете скористатися методами replaceабо класу. Якщо ви хочете замінити підрядок, ви можете отримати підрядок за допомогою API.replaceAllStringsubstring

Наприклад

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

Для заміни вмісту в "()" ви можете використовувати:

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

якась друкарська помилка. повинно бутиString toBeReplaced = str.substring(startIndex , endIndex + 1);
Yeung

також варто видалити пробіл: System.out.println (str.replace ("(з приємними гравцями)", ""));
kiedysktos

32

Заміна рядка

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

Редагувати:

За покажчиком

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

3
не забувайтеs = s.replace(...)
Сергій Калініченко

Не може бути, бо те, що в дужках, може змінитися. Мені потрібно змінити рядок із символу (
zmki

19

Використовуйте String.Replace ():

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

Приклад:

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

Я не був виборцем, але, можливо, тому, що ви неправильно поставили Замінити?
Майк Кван,

1
Проголосував за те, щоб заперечити ефект від в'їзду (тобто, незрозумілого і, мабуть, вибагливого) голосування.
Gayot Fow 02

Не обов'язково, що рядок буде таким самим, як наведений приклад. Тому ви не можете використовувати заміну.
Заплутайте

Тут є порівняння продуктивності, метод String replace використовує регулярний вираз під капотом. stackoverflow.com/questions/16228992/…
Ігор Вукович,


7

За допомогою StringBuilder ви можете замінити наступним чином.

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

6

Спочатку я б розділив вихідний рядок на масив рядка з маркером "(", а рядок у позиції 0 вихідного масиву - це те, що ви хотіли б мати.

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

String result = output[0];

5

Вам слід використовувати метод substring () об'єкта String.

Ось приклад коду:

Припущення: Тут я припускаю, що ви хочете отримати рядок до першої дужки

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

Використання StringUtils із спільного lang

Нульовий рядок джерела поверне нуль. Порожній ("") рядок джерела поверне порожній рядок. Нульовий рядок видалення поверне вихідний рядок. Порожній ("") рядок видалення поверне вихідний рядок.

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

Якщо вам просто потрібно видалити все після "(", спробуйте це. Нічого не робить, якщо немає дужок.

StringUtils.substringBefore(str, "(");

Якщо після кінцевих дужок може бути вміст, спробуйте це.

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

Щоб видалити кінцеві пробіли, використовуйте str.trim()

Функції Apache StringUtils є нульовими, порожніми та не відповідають безпеці


Хороше рішення !!
Суміт Шукла

0

Ви можете використати replaceдля виправлення рядка. Наведене нижче поверне все перед символом "(", а також видалить усі пробіли, що ведуть і завершують. Якщо рядок починається з "(", це просто залишить його як є.

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

Здається, це не працює в Java. Це може бути похідним від ECMAscript. У вас є якийсь спосіб зробити цей код таким, як у Java?
1111161171159459134

0

Рішення Котліна

Якщо ви видаляєте певний рядок з кінця, використовуйте removeSuffix ( Документація )

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

Якщо суфікс у рядку не існує, він просто повертає оригінал

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

Якщо ви хочете видалити після символу, використовуйте

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

Ви також можете перевірити removePrefix, removeRange, removeSurroundingі replaceAfterLastякі подібні до

Повний список знаходиться тут: ( Документація )

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.