簡體   English   中英

如何從Java中的字符串中提取子字符串

[英]How to extract a substring from a string in java

我正在做的是從我的代碼中驗證URL。 所以我有一個帶有url的文件,我想看看它們是否存在。 如果存在,則網頁包含xml代碼,其中將包含我要提取的電子郵件地址。 我繞了一個while循環,在每種情況下,如果URL存在,則xml被添加到字符串中。 這個大字符串包含xml代碼。 我想做的是從其中包含xml代碼的字符串中提取電子郵件地址。 我無法使用字符串api中的方法,因為它們要求您指定不知道的銷售索引,因為它每次都在變化。

我希望做的是在字符串中搜索以(例如“ <email id> ”)和(例如“ </email id> ”)結尾的子字符串,並將這些字符串之間的字符串添加到單獨的字符串中。

有誰知道這是否可行,或者是否有更簡單/不同的方式來做我想做的事情?

謝謝。

如果您很了解XML文檔的結構,我將建議您使用XPath

例如,對於<email> a@b.com </ email>中包含的電子郵件,將有一個XPath請求,如/ root / email(取決於您的xml結構)

通過在XML文件上執行此XPath查詢,您將自動獲得數組中返回的所有<email>元素( Node )。 如果您有XML元素,那么您就有XML內容。 (#getNodeValue)

要回答您的主題問題:.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);
    }
}

您是否嘗試過使用Regex? 樣本文檔可能對於此類問題非常有用。

查看org.xml.sax API。 它非常易於使用,並允許您通過XML進行解析,並在遇到任何感興趣的內容時對內容進行任何處理。 因此,您可以輕松地添加一些邏輯以查找<email>起始元素,然后保存將包含您的電子郵件地址的內容(字符)。

如果我正確理解了您的問題,則說明您是從多個網頁中提取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文檔有些有效。

" <?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>"

然后,您可以將其加載到Xml Document對象中,並可以使用Xpath表達式提取電子郵件節點及其值。

如果您不想這樣做,則可以使用indexOf(String str, int fromIndex)方法來找到<email >和</email >(或稱為它們的任何位置)位置。 然后基於這些子字符串。 不過,這並不是一種特別干凈或易於閱讀的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM