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