ReplaceAll и "не заменяет - PullRequest
5 голосов
/ 20 мая 2011

Может ли кто-нибудь указать мне, как работает первое, а второе - нет? Я озадачен, почему второе условие if не работает. Я хотел бы получить подсказку, спасибо.

String msg = o.getTweet();
        if (msg.indexOf("&") > 0) {
            msg = msg.replaceAll("&", "&");// vervangt & door &
        }
        if (msg.indexOf(""") > 0) {
            msg = msg.replaceAll(""", "aa"); //vervangt " door "
        }

Ответы [ 2 ]

16 голосов
/ 20 мая 2011

Поскольку ZERO является очень действительным индексом.Попробуйте,

    String msg = o.getTweet();
    if (msg.indexOf("&") != -1) {
        msg = msg.replaceAll("&", "&");// vervangt & door &
    }
    if (msg.indexOf(""") != -1) {
        msg = msg.replaceAll(""", "aa"); //vervangt " door "
    }

Объяснение:

В документации String.indexOf(String str) объясняется, что ", если строковый аргумент встречается как подстрока в этомобъект, то возвращается индекс первого символа первой такой подстроки; если это не подстрока, возвращается -1. " - [ссылка на документы]

Это можно сделать так же просто, как показано ниже: OpenSauce указал здесь .

msg = msg.replace("&", "&").replace(""", "\"");

Полезные ссылки:

11 голосов
/ 20 мая 2011

Вам не нужно проверять наличие подстроки, методы replace и replaceAll не используются, если подстрока не найдена. Поскольку вы не ищете регулярные выражения, вы также можете использовать replace вместо replaceAll - это будет несколько более эффективно и не удивит вас, если вы также захотите проверить другие строки, которые содержат специальные регулярные выражения символы.

msg = msg.replace("&", "&").replace(""", "\"");

обратите внимание, что replace действительно заменяет все совпадения, как вы хотите. Разница между replace и replaceAll заключается в том, интерпретируется ли arg как регулярное выражение или нет.

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