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

如何在java中从字符串中提取子字符串,java,string,url,Java,String,Url,我所做的是从我的代码中验证URL。所以我有一个包含url的文件,我想看看它们是否存在。如果它们存在,网页将包含xml代码,其中将包含我要提取的电子邮件地址。 我循环了一个while循环,在每个实例中,如果url存在,则将xml添加到字符串中。这个大字符串包含xml代码。我想做的是从这个字符串中提取包含xml代码的电子邮件地址。我不能使用string api中的方法,因为它们要求您指定sarting索引,我不知道,因为它每次都会变化 我希望在字符串中搜索以(例如“”)开头、以(例如“”)结尾的子字

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

我希望在字符串中搜索以(例如“
”)开头、以(例如“
”)结尾的子字符串,并将这些字符串之间的字符串添加到单独的字符串中

有人知道这是否可行,或者是否有一种更简单/不同的方式来做我想做的事情吗


谢谢

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


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

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

一个正则表达式,它将查找并返回两个“字符”之间的字符串:

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

查看org.xml.sax API。它非常易于使用,允许您通过xml进行解析,并在遇到感兴趣的内容时对内容执行任何操作。因此,您可以轻松添加一些逻辑来查找开始元素,然后保存内容(字符)它将包含您的电子邮件地址。

如果您非常了解XML文档的结构,我建议您使用

例如,电子邮件包含在a@b.com,将有一个XPath请求,如/root/email(取决于您的xml结构)


通过对XML文件执行此XPath查询,您将自动获得数组中返回的所有元素()。如果您有XML元素,您就有XML内容。(#getNodeValue)

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

看起来像
blah

a。b@c.com

blah

blah

a。c@c.com

blah

blah

a。d@c.com

blah

blah

"

我建议通过包含根元素使其成为某种有效的xml文档

"


blah

a。b@c.com

blah

blah

a。c@c.com

blah

blah

a。d@c.com

blah

blah

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

如果您不想这样做,您可以使用
indexOf(String str,int fromIndex)
方法来查找
(或它们被称为什么)位置。然后基于这些位置进行子字符串。但这不是一种特别干净或易于阅读的方法


"
<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 version="1.0" encoding="ISO-8859-1"?
>
<newRoot
>
<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
>
</newroot
>
"