使用Java,我想通过一个文本行并更换所有符号的符号( &
与XML实体引用) &
。
我扫描的文本与扫描仪类文本中的每个字线,然后。 然后,我用CharacterIterator
遍历单词的每个字符。 但是,我怎么能替换字符? 首先,字符串是不可变对象。 其次,我要替换的字符( &
)与几个字符( amp&;
)。 我应该如何看待呢?
CharacterIterator it = new StringCharacterIterator(token);
for(char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
if(ch == '&') {
}
}
Answer 1:
尝试使用String.replace()
或String.replaceAll()
来代替。
String my_new_str = my_str.replace("&", "&");
(这两个取代所有出现; replaceAll
允许使用正则表达式)。
Answer 2:
简单的答案是:
token = token.replace("&", "&");
尽管相比的replaceAll,更换并做的replaceAll的名字,它只是不使用正则表达式,这似乎是为了这里(无论从性能和良好的实践观点 - 不要使用偶然的正则表达式因为他们,你将不会被关注的特殊字符的要求)。
肖恩光明的答案很可能是一样好,是值得我们思考的,从性能的角度来看不存在的性能和性能测试的一些进一步的目标要求,如果你已经知道这个代码是性能的热点,如果这是你的问题的来源。 这当然不值得的downvotes。 只需使用StringBuilder而不是StringBuffer的,除非你需要同步。
话虽这么说,这里有一个略深潜在的问题。 转义字符是一个已知的问题,其中许多图书馆在那里解决。 你可能要考虑在CDATA部分包裹在XML中的数据,或者你可能更愿意使用一个XML库(包括现在自带的JDK的)实际生成的XML正确(这样它会处理编码)。
阿帕奇也有一个转义库作为一般语言的一部分。
Answer 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("<");
break;
case '>':
s.append(">");
break;
default:
s.append(ch);
break;
}
}
token = s.toString();
Answer 4:
您可能还需要检查,以确保您不会更换一个已经被替换的发生。 您可以使用正则表达式负先行做到这一点。
例如:
String str = "sdasdasa&adas&dasdasa";
str = str.replaceAll("&(?!amp;)", "&");
这将导致字符串“ sdasdasa&adas&dasdasa
”。
正则表达式模式“&(?安培)”基本上说:匹配“&”,其后面没有任何发生“安培;”。
Answer 5:
只需创建一个包含所有有问题的数据字符串,然后使用String.replaceAll()像下面。
String result = yourString.replaceAll("&", "&");
Answer 6:
转义字符串可能会非常棘手 -特别是如果你想采取统一考虑。 我认为XML是简单的格式/语言之一逃走,但仍。 我建议采取看看StringEscapeUtils类的Apache Commons Lang中,其方便的将escapeXml方法。
Answer 7:
试试这个code.You可以用另一个指定字符替换任何字符。 在这里,我试图替换字母“A”与“ - ”字符的字符串给予“abcdeaa”
输出- > _ 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");
}
}
Answer 8:
如果你使用Spring,你可以简单地调用HtmlUtils.htmlEscape(String input)
它将处理“&”到“&”翻译。
Answer 9:
//I think this will work, you don't have to replace on the even, it's 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);
}
}
}
文章来源: How do I replace a character in a string in Java?