Подтвердить что ты не робот

Как заменить символ в строке на Java?

Используя Java, я хочу пройти строки текста и заменить все символы амперсанда (&) ссылкой на XML-объект &.

Я просматриваю строки текста, а затем каждое слово в тексте со Сканером. Затем я использую CharacterIterator для итерации по каждому символу слова. Однако, как я могу заменить символ? Во-первых, строки являются неизменяемыми объектами. Во-вторых, я хочу заменить символ (&) несколькими символами (amp&;). Как мне подойти к этому?

CharacterIterator it = new StringCharacterIterator(token);
for(char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
       if(ch == '&') {

       }
}
4b9b3361

Ответ 1

Попробуйте String.replace() использовать String.replace() или String.replaceAll().

String my_new_str = my_str.replace("&", "&");

(Оба заменяют все вхождения; replaceAll позволяет использовать регулярные выражения.)

Ответ 2

Простой ответ:

token = token.replace("&", "&");

Несмотря на имя по сравнению с replaceAll, заменитель делает replaceAll, он просто не использует регулярное выражение, которое, как представляется, здесь (как с точки зрения производительности, так и с точки зрения хорошей практики), не использует регулярные когда они имеют особые требования к персонажам, на которые вы не будете обращать внимания).

Ответ на Шон Яркий, вероятно, так же хорош, как стоит подумать с точки зрения производительности, если у вас нет какого-либо дополнительного целевого требования к тестированию производительности и производительности, если вы уже знаете, что этот код является горячей точкой для производительности, если это ваш вопрос. приходящий из. Это, конечно, не заслуживает нисходящих спусков. Просто используйте StringBuilder вместо StringBuffer, если вам не нужна синхронизация.

Таким образом, здесь есть несколько более глубокая потенциальная проблема. Экранирование символов - известная проблема, которую адресуют множество библиотек. Возможно, вы захотите рассмотреть вопрос об упаковке данных в разделе CDATA в XML, или вы можете предпочесть использовать библиотеку XML (включая ту, которая поставляется вместе с JDK), чтобы фактически генерировать XML правильно (чтобы он обрабатывал кодировку).

Apache также имеет экранирующую библиотеку в составе Commons Lang.

Ответ 3

StringBuilder s = new StringBuilder(token.length());

CharacterIterator it = new StringCharacterIterator(token);
for (char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
    switch (ch) {
        case '&':
            s.append("&");
            break;
        case '<':
            s.append("&lt;");
            break;
        case '>':
            s.append("&gt;");
            break;
        default:
            s.append(ch);
            break;
    }
}

token = s.toString();

Ответ 4

Вы также можете проверить, чтобы убедиться, что вы не заменяете событие, которое уже было заменено. Для этого вы можете использовать регулярное выражение с отрицательным прогнозом.

Например:

String str = "sdasdasa&amp;adas&dasdasa";  
str = str.replaceAll("&(?!amp;)", "&amp;");

Это приведет к строке " sdasdasa&amp;adas&amp;dasdasa ".

Шаблон регулярного выражения "& (?! amp;)" в основном гласит: сопоставьте любое вхождение '&', за которым не следует 'amp;'.

Ответ 5

Просто создайте строку, содержащую все данные, о которых идет речь, а затем используйте String.replaceAll(), как показано ниже.

String result = yourString.replaceAll("&", "&amp;");

Ответ 6

Экранирование строк может быть сложным - особенно если вы хотите включить unicode. Я полагаю, что XML - один из самых простых форматов/языков для выхода, но все же. Я бы рекомендовал взглянуть на класс StringEscapeUtils в Apache Commons Lang и его удобный escapeXml метод.

Ответ 7

Попробуйте этот код. Вы можете заменить любой символ другим заданным символом. Здесь я попытался заменить букву 'a' символом "-" для строки строки "abcdeaa"

OutPut → _ bcdef __

    public class Replace {

    public static void replaceChar(String str,String target){
        String result = str.replaceAll(target, "_");
        System.out.println(result);
    }

    public static void main(String[] args) {
        replaceChar("abcdefaa","a");
    }

}

Ответ 8

Посмотрите этот метод.

Ответ 9

Если вы используете Spring, вы можете просто вызвать HtmlUtils.htmlEscape(String input), который будет обрабатывать '&' к '&' перевод.

Ответ 10

//I think this will work, you don't have to replace on the even, it just an example. 

 public void emphasize(String phrase, char ch)
    {
        char phraseArray[] = phrase.toCharArray(); 
        for(int i=0; i< phrase.length(); i++)
        {
            if(i%2==0)// even number
            {
                String value = Character.toString(phraseArray[i]); 
                value = value.replace(value,"*"); 
                phraseArray[i] = value.charAt(0);
            }
        }
    }