Ответ 1
Попробуйте String.replace()
использовать String.replace()
или String.replaceAll()
.
String my_new_str = my_str.replace("&", "&");
(Оба заменяют все вхождения; replaceAll
позволяет использовать регулярные выражения.)
Используя Java, я хочу пройти строки текста и заменить все символы амперсанда (&
) ссылкой на XML-объект &
.
Я просматриваю строки текста, а затем каждое слово в тексте со Сканером. Затем я использую CharacterIterator
для итерации по каждому символу слова. Однако, как я могу заменить символ? Во-первых, строки являются неизменяемыми объектами. Во-вторых, я хочу заменить символ (&
) несколькими символами (amp&;
). Как мне подойти к этому?
CharacterIterator it = new StringCharacterIterator(token);
for(char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
if(ch == '&') {
}
}
Попробуйте String.replace()
использовать String.replace()
или String.replaceAll()
.
String my_new_str = my_str.replace("&", "&");
(Оба заменяют все вхождения; replaceAll
позволяет использовать регулярные выражения.)
Простой ответ:
token = token.replace("&", "&");
Несмотря на имя по сравнению с replaceAll, заменитель делает replaceAll, он просто не использует регулярное выражение, которое, как представляется, здесь (как с точки зрения производительности, так и с точки зрения хорошей практики), не использует регулярные когда они имеют особые требования к персонажам, на которые вы не будете обращать внимания).
Ответ на Шон Яркий, вероятно, так же хорош, как стоит подумать с точки зрения производительности, если у вас нет какого-либо дополнительного целевого требования к тестированию производительности и производительности, если вы уже знаете, что этот код является горячей точкой для производительности, если это ваш вопрос. приходящий из. Это, конечно, не заслуживает нисходящих спусков. Просто используйте StringBuilder вместо StringBuffer, если вам не нужна синхронизация.
Таким образом, здесь есть несколько более глубокая потенциальная проблема. Экранирование символов - известная проблема, которую адресуют множество библиотек. Возможно, вы захотите рассмотреть вопрос об упаковке данных в разделе CDATA в XML, или вы можете предпочесть использовать библиотеку XML (включая ту, которая поставляется вместе с JDK), чтобы фактически генерировать XML правильно (чтобы он обрабатывал кодировку).
Apache также имеет экранирующую библиотеку в составе Commons Lang.
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("<");
break;
case '>':
s.append(">");
break;
default:
s.append(ch);
break;
}
}
token = s.toString();
Вы также можете проверить, чтобы убедиться, что вы не заменяете событие, которое уже было заменено. Для этого вы можете использовать регулярное выражение с отрицательным прогнозом.
Например:
String str = "sdasdasa&adas&dasdasa";
str = str.replaceAll("&(?!amp;)", "&");
Это приведет к строке " sdasdasa&adas&dasdasa
".
Шаблон регулярного выражения "& (?! amp;)" в основном гласит: сопоставьте любое вхождение '&', за которым не следует 'amp;'.
Просто создайте строку, содержащую все данные, о которых идет речь, а затем используйте String.replaceAll(), как показано ниже.
String result = yourString.replaceAll("&", "&");
Экранирование строк может быть сложным - особенно если вы хотите включить unicode. Я полагаю, что XML - один из самых простых форматов/языков для выхода, но все же. Я бы рекомендовал взглянуть на класс StringEscapeUtils в Apache Commons Lang и его удобный escapeXml метод.
Попробуйте этот код. Вы можете заменить любой символ другим заданным символом. Здесь я попытался заменить букву '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");
}
}
Посмотрите этот метод.
Если вы используете Spring, вы можете просто вызвать HtmlUtils.htmlEscape(String input)
, который будет обрабатывать '&' к '&' перевод.
//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);
}
}
}