【问题标题】:Java use replaceAll with Escape Characters StringJava 使用带有转义字符字符串的 replaceAll
【发布时间】:2014-05-08 06:17:51
【问题描述】:

晚安堆栈溢出!

今晚我试图从解析为字符串的 XML 中删除“标题”,并使用 replaceAll 删除以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

从字符串。由于它将与另一个 XML 字符串连接,因此离开它会留下其中两个。

所以我尝试了:

// getXML already has my XML.
getXML = getXML.replaceAll("<?xml version="1.0" encoding="UTF-8" standalone="no"?>", "");

由于字符串中的 "" 导致编译失败。然后我尝试了转义序列:

String headerXMLString = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
getXML = getXML.replaceAll(headerXMLString, "");

这也失败了,虽然程序本身运行我假设由于转义(\)它不会删除字符串

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

由于字符串在技术上并不相同。

如何解决这个问题?非常感谢任何和所有帮助。

【问题讨论】:

标签: java xml regex string


【解决方案1】:

不要使用replaceAll(),它会进行正则表达式搜索。
请改用replace(),它使用纯文本搜索。

getXML = getXML.replace(headerXMLString, "");

请注意,尽管存在不幸的名称差异,replace() 仍会替换找到的所有个事件。


更好的方法是使用正则表达式来匹配 XML 标头,无论它包含什么:

getXML = getXML("^<?xml.*?\\?>", "");

如果没有标题,这也不会做任何事情。

【讨论】:

  • @Erick 我很久以前就发布了相同的答案 :)
【解决方案2】:

您可以使用replace() 代替replaceAll() 以下对我有用

String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>";
String s2 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>";
s2 = s2.replace(s, "");
System.out.println(s2);

操作:

<blank>

编辑:

跟随怎么样?

String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>";
Scanner sc = new Scanner(new File("D:\\temp.txt"));
String s2 = sc.nextLine();
System.out.println("b4 "+s2);
s2 = s2.replaceAll(s, "");
System.out.println("aftr "+s2);

文件内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

【讨论】:

  • 这不适用于我的情况,因为具有该行的字符串没有转义序列。您正在删除相同的字符串。
  • 我告诉过你同样的事情 :) 不是吗??
【解决方案3】:

如果您想使用文字模式,请使用 Pattern.Quote or \Q ... \E:

Pattern.quote("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>")

http://regex101.com/r/cF3aI1

显示这两种方法的工作 Java 示例:

https://ideone.com/mZwwOs

【讨论】:

  • 尝试使用:getXML = getXML.replaceAll(Pattern.quote(""), "" );导致编译错误。我该如何解决?
  • 你仍然需要转义引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
相关资源
最近更新 更多