【发布时间】:2014-02-11 12:59:18
【问题描述】:
在Java中,当每个块开头的分隔符与每个块末尾的分隔符不同时,将字符串拆分为块数组的最佳方法是什么?
例如,假设我有String string = "abc 1234 xyz abc 5678 xyz"。
我想应用某种复杂的split 以获得{"1234","5678"}。
首先想到的是:
String[] parts = string.split("abc");
for (String part : parts)
{
String[] blocks = part.split("xyz");
String data = blocks[0];
// Do some stuff with the 'data' string
}
有没有更简单/更清洁/更有效的方法?
我的目的(您可能已经猜到了)是解析 XML 文档。
我想将给定的 XML 字符串拆分为给定标记的内部 XML 块。
例如:
String xml = "<tag>ABC</tag>White Spaces Only<tag>XYZ</tag>";
String[] blocks = Split(xml,"<tag>","</tag>"); // should be {"ABC","XYZ"}
您将如何实现String[] Split(String str,String prefix,String suffix)?
谢谢
【问题讨论】:
-
您可以使用正则表达式,但如果您的表达式比您的示例更复杂,您可能应该使用 xml 解析器。
-
您将无法正确处理
<tag><tag>foo bar</tag></tag>。 -
@JoshuaTaylor 是对的。在使用诸如 XML 之类的重要语法时,您应该使用某人已经编写的软件。肯定有一个学习曲线,但你花在学习上的时间比你花在寻找“奇怪”案例(如 cmets、嵌套标签和转义终止符)上的时间要少得多。
标签: java xml regex string-split