Вопрос по string, java, replace – Как заменить первое вхождение строки в Java

35

Я хочу заменить первое вхождение строки следующим образом.

  String test = "see Comments, this is for some test, help us"

** Если тест содержит следующие данные, они не должны заменять

  1. See Comments, (with space at the end)
  2. See comments,
  3. See Comments**

Я хочу получить вывод следующим образом,

 Output: this is for some test, help us

Заранее спасибо,

What have you tried? user1329572
Вы можете выполнить поиск непосредственно по вашему вопросу или немного перевести взгляд вправо от этого комментария и проверить СВЯЗАННЫЕ вопросы ... hovanessyan
Google скажет вам, как заменить первое вхождение REGEX, а не строку. Sridhar-Sarnobat
Или вы можете посмотреть на документациюString и найтиreplaceFirst()... brimborium

Ваш Ответ

6   ответов
14

использованиеsubstring(int beginIndex):

String test = "see Comments, this is for some test, help us";
String newString = test.substring(test.indexOf(",") + 2);
System.out.println(newString);

OUTPUT:

this is for some test, help us

Подождите, что если строка, которую вы хотите заменить, не находится в начале входной строки?
15

Вы должны использовать уже протестированные и хорошо документированные библиотеки в пользу написания собственного кода.

org.apache.commons.lang3.
  StringUtils.replaceOnce("coast-to-coast", "coast", "") = "-to-coast"

Javadoc

Существует даже версия, которая нечувствительна к регистру (что хорошо).

Maven

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

Credits

Мой ответ - увеличение:https://stackoverflow.com/a/10861856/714112

8

Вы можете использовать следующую инструкцию, чтобы заменить первое вхождение строки.

String result = input.replaceFirst(Pattern.quote(stringToReplace), stringToReplaceWith);

этоссылка на сайт имеет полную программу, включая тестовые случаи.

Это лучший ответ, потому что он также обрабатывает символы регулярных выражений и не зависит от внешних библиотек.
-1

Используйте String replaceFirst, чтобы поменять первый экземпляр разделителя на нечто уникальное:

String input = "this=that=theother"
String[] arr = input.replaceFirst("=", "==").split('==',-1);
String key = arr[0];
String value = arr[1];
System.out.println(key + " = " + value);
72

Ты можешь использоватьreplaceFirst(String regex, String replacement) метод Строка.

Что делать, если вы пытаетесь заменить строку, содержащую-?
@ Sridhar-Sarnobat, когда строка поиска содержит символы шаблона, которые не должны интерпретироваться, вы можете отфильтровать строку черезPattern.quote(…) первый. Тем не менее, это может быть более эффективным в использованииPattern.compile(searchString, Pattern.LITERAL).matcher(input) .replaceAll(replacement) затем & # x2026;
@ Шридхар-Сарнобат, это понятно по параметрам, которые я упомянул в ответе, наверное? И так оно и должно быть использовано. ,
Это может быть для регулярных выражений, но будет работать, даже если вы предоставите строку вместо встроенного регулярного выражения. Я только что проверил. Поэтому вышеприведенное обсуждение сбивает с толку людей, которые это видят. Ответ идеален.
Это для REGEX не, Строки.
2

Вы можете использовать следующий метод.

public static String replaceFirstOccurrenceOfString(String inputString, String stringToReplace,
        String stringToReplaceWith) {

    int length = stringToReplace.length();
    int inputLength = inputString.length();

    int startingIndexofTheStringToReplace = inputString.indexOf(stringToReplace);

    String finalString = inputString.substring(0, startingIndexofTheStringToReplace) + stringToReplaceWith
            + inputString.substring(startingIndexofTheStringToReplace + length, inputLength);

    return finalString;

}

Следующийссылка на сайт Приведите примеры замены первого вхождения строки с использованием регулярных выражений и без них.

Похожие вопросы