如何replaceJava中string中的字符?

使用Java,我想通过一个文本的行,并用XML实体引用&

我扫描文本的行,然后扫描仪类的文本中的每个单词。 然后我使用CharacterIterator遍历单词的每个字符。 但是,我怎样才能取代angular色呢? 首先,string是不可变的对象。 其次,我想用几个字符( amp&; )replace一个字符( & )。 我应该如何处理这个?

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

尝试使用String.replaceAll()来代替。

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

简单的答案是:

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

尽pipe名称与replaceAll相比,replace并没有做一个replaceAll,它只是不使用正则expression式,这似乎是在这里(从性能和良好的实践angular度来看 – 不要使用正则expression式因为他们有特殊的性格要求,你不会关注)。

如果你已经知道这个代码是性能的热点,如果你的问题来自于这个问题的话,Sean Bright的回答可能是从性能的angular度来看值得思考的,如果没有进一步的性能和性能testing目标需求的话。 这当然不值得赞赏。 只要使用StringBuilder而不是StringBuffer,除非需要同步。

这就是说,这里有一个更深的潜在问题。 转义字符是一个已知的问题,有很多的图书馆在那里解决。 您可能需要考虑将数据包装在XML中的CDATA节中,或者您可能更愿意使用XML库(包括现在包含JDK的XML库)来正确生成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("&amp;"); break; case '<': s.append("&lt;"); break; case '>': s.append("&gt;"); break; default: s.append(ch); break; } } token = s.toString(); 

您也可能要检查以确保您不replace已被replace的事件。 您可以使用带有负向视图的正则expression式来执行此操作。

例如:

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

这将导致string“sdasdasa&adas&dasdasa”。

正则expression式模式“&(?! amp;)”基本上是这样说的:匹配任何不是“amp”后面的“&”。

只需创build一个包含所有有问题的数据的string,然后像下面那样使用String.replaceAll() 。

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

转义string可能会很棘手 – 特别是如果你想考虑unicode。 我认为XML是更简单的格式/语言之一,但仍然是。 我build议看看Apache Commons Lang中的StringEscapeUtils类,以及它的方便的escapeXml方法。

试试这个code.You可以replace任何字符与另一个给定的字符。 在这里,我尝试用“ – ”字符replace给定string“abcdeaa”的字母“a

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'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); } } }