String.replaceFirst не заменяет ожидаемую строку иногда - PullRequest
1 голос
/ 07 февраля 2011

Используя Java, я пытаюсь заменить вхождение одной строки на другую.Это работает в большинстве случаев.Но иногда эта определенная строка не заменяется в данном контенте.

Когда я выполняю поиск определенной строки в данном контенте с помощью метода indexOf, я могу правильно получить индекс этой строки.Но когда я использую метод replaceFirst для замены этой строки, операция заканчивается неудачей.

Затем я попытался заменить, используя следующую, чтобы убежать от escape-символов.

cont = Pattern.compile(str, Pattern.LITERAL).matcher(cont)
    .replaceFirst(Matcher.quoteReplacement("replace string"))

Позволяет нам принятьниже содержание в качестве примера

Чтобы посмотреть изображения животных, посетите этот сайт http://www.example.net/animals/cat_345_456.JPG.Также более подробную информацию можно найти по этой ссылке также http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid=.Спасибо, что посетили нас.

В приведенном выше содержании Сначала я присваиваю str значение http://www.example.net/animals/cat_345_456.JPG, а затем вызываю метод replace first.

В этом случае ожидается замена строкиправильно.

Тогда теперь я назначаю str со значением http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid= и вызываю метод замены первый.

Но на этот раз он не был заменен.Но когда я использую метод String.indexof, он правильно дает порядковый номер этой строки.

Я что-то пропустил?

Пожалуйста, помогите.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 февраля 2011

Ваш код отлично работает для меня ... вот мой тестовый код: -

public class StringReplaceTest {

    public static String replaceMe(String str) {
        String cont = "For the pictures of animal please visit this site http://www.example.net/animals/cat_345_456.JPG . Also more details visit this link also http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid= . Thanks visiting us.";
        return Pattern.compile(str, Pattern.LITERAL).matcher(cont).replaceFirst(Matcher.quoteReplacement("replace string"));
    }

    @Test
    public void testOne() {
        String str = "http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid=";
        String actual = StringReplaceTest.replaceMe(str);
        String expected = "For the pictures of animal please visit this site http://www.example.net/animals/cat_345_456.JPG . Also more details visit this link also replace string . Thanks visiting us.";

        assertEquals(expected, actual);
    }

    @Test
    public void testTwo() {
        String str = "http://www.example.net/animals/cat_345_456.JPG";
        String actual = StringReplaceTest.replaceMe(str);
        String expected = "For the pictures of animal please visit this site replace string . Also more details visit this link also http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid= . Thanks visiting us.";

        assertEquals(expected, actual);
    }

}
0 голосов
/ 07 февраля 2011

Я считаю, что в тех случаях, когда это не работает, ваша цель поиска содержит некоторые специальные символы, которые имеют смысл для шаблонов. Например () [] {} и т. Д. Этот материал должен быть экранирован с помощью обратной косой черты. Но Джон прав: короткий пример объясняет и помогает гораздо больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...