如何从java中的字符串中提取子字符串

时间:2009-08-12 09:19:45

标签: java string url

我正在做的是验证代码中的网址。所以我有一个带有url的文件,我想知道它们是否存在。如果它们存在,则网页包含xml代码,其中将有一个我想要提取的电子邮件地址。 我绕了一个while循环,在每个实例中,如果url存在,则将xml添加到字符串中。这个大字符串包含xml代码。我想要做的是从该字符串中提取电子邮件地址,其中包含xml代码。我不能使用字符串api中的方法,因为它们要求您指定我不知道的sarting索引,因为它每次都会变化。

我希望做的是在字符串中搜索以(例如“<email id>”)开头并以(例如“</email id>”)结尾的子字符串并在这些字符串之间添加字符串分开的字符串。

有谁知道这是否可行,或者是否有更容易/不同的方式做我想做的事情?

感谢。

6 个答案:

答案 0 :(得分:4)

如果您熟悉XML文档的结构,我建议您使用XPath

例如,对于&lt; email&gt; a@b.com< / email&gt;中包含的电子邮件,会有一个XPath请求,例如/ root / email(取决于您的xml结构)

通过在XML文件上执行此XPath查询,您将自动获得所有&lt; email&gt;元素(Node)在数组中返回。如果您有XML元素,那么您就拥有了XML内容。 (#getNodeValue)

答案 1 :(得分:3)

回答你的主题问题:.indexOf,或正则表达式。

但在对您的问题进行简要回顾之后,您应该真正正确地处理XML文档。

答案 2 :(得分:2)

一个正则表达式,它将在两个“字符:

之间找到并返回字符串
import java.util.regex.Pattern;
import java.util.regex.Matcher;

private final static Pattern pattern = Pattern.compile("\"(.*?)\"");

private void doStuffWithStringsBetweenQuotes(String source) {
    Matcher matcher = pattern.matcher(source);
    while (matcher.find()) {
        String match = matcher.group(1);
    }
}

答案 3 :(得分:0)

您是否尝试使用正则表达式?对于这类问题,示例文档可能非常有用。

答案 4 :(得分:0)

查看org.xml.sax API。它非常易于使用,并且允许您解析XML并在遇到任何感兴趣的内容时对内容执行任何操作。所以你可以轻松添加一些逻辑来寻找&lt;电子邮件&gt;启动元素,然后保存将包含您的电子邮件地址的内容(字符)。

答案 5 :(得分:0)

如果我正确理解您的问题,您将从多个网页中提取XML并将它们连接成一个大的“xml”字符串,

看起来像的东西


"<somedata>blah</somedata>
<email>a.b@c.com</email>
<somedata>blah</somedata>
<somedata>blah</somedata>
<email>a.c@c.com</email>
<somedata>blah</somedata>
<somedata>blah</somedata>
<email>a.d@c.com</email>
<somedata>blah</somedata>
<somedata>blah</somedata>
"

我建议通过包含根元素来使它成为一个有效的xml文档。

<somedata

</somedata

然后您可以将其加载到Xml Document对象中,并可以使用Xpath表达式来提取电子邮件节点及其值。

如果您不想这样做,可以使用<email方法查找</email&gt;和<somedata&gt; (或称其他任何职位)职位。然后基于那些子串。尽管如此,这并不是一种特别干净或易于理解的方式。