2017-02-18 12 views
-9

的特定部分,舉例來說,如果我有這個字符串:如何提取字符串JAVA

<option value="BA7233_550" data-maxavailable="22.0" data-maxorderqty="10.0" data-status="IN_STOCK" data-context="sizes:36"> 37 1/3 

,我想抓住字符串的這一部分:BA7233_550並將其保存到一個變量。

你能幫我嗎?

+4

你有沒有通過現有的方法看'String'? – luk2302

+4

歡迎來到Stack Overflow!請參考[遊覽],四處看看,並仔細閱讀[幫助],尤其是[*我如何提出一個好問題?](/ help/how-to-ask) –

+1

這是令人失望的很多級別:( –

回答

0

您可以使用正則表達式,例如:

public static void main(String[] args) { 
    String str = "<option value=\"BA7233_550\" data-maxavailable=\"22.0\" 
        data-maxorderqty=\"10.0\" data-status=\"IN_STOCK\" 
        data-context=\"sizes:36\"> 37 1/3 "; 
    //get String between start and end 
    String start = "value=\"", end ="\""; 

    String regexString = Pattern.quote(start) + "(.*?)" + Pattern.quote(end); 
    Pattern pattern = Pattern.compile(regexString); 
    Matcher matcher = pattern.matcher(str); 

    //this will return all match Strings so if you want to store them, you can use a List<String> 
    List<String> res = new ArrayList<>(); 
    while (matcher.find()) { 
     System.out.println(matcher.group(1)); 
     res.add(matcher.group(1)); 
    } 
} 
System.out.println(res); 

所以,如果你想獲得BA7233_550value=""之間的存在。

0

您可以獲取使用下列任一String類方法String的一部分:

  1. 方法名稱substring(int firstIndex)
    說明:返回此字符串的一部分從firstIndex字符到最後一個字符(包括)。
  2. 方法名稱substring(int firstIndex, int lastIndex)
    說明:返回從firstIndex到字符的字符此字符串在lastIndex的部分 - 1(含)。

您可以提取部分字符串你想用下面的代碼(即部分被保存到stringExcerpt變量):

String initialString = "<option value=\"BA7233_550\" data-maxavailable=\"22.0\" data-maxorderqty=\"10.0\" data-status=\"IN_STOCK\" data-context=\"sizes:36\"> 37 1/3 "; 
String stringExcerpt = initialString.substring(15, 25); 
+0

我不認爲將15和25這樣的幻數放入代碼是一個好主意。如果**選項值**字段包含值** BA7233_550673 **,該怎麼辦? – DevilsHnd

0

如果你想要的東西很簡單:

String value = myString.substring(myString.indexOf("\"")+1, 
       myString.indexOf("\"", myString.indexOf("\"")+1)); 

上面的代碼使用String.substring()方法和String.IndexOf()方法。由於要從字符串中提取的數據是字符串中含有雙引號的數據的第一位,因此它相對容易。

在上面的示例代碼中,我們使用String.substring()方法從字符串中收集我們的子字符串。爲了得到這個子串,我們需要提供String.substring()方法有兩個具體的參數,這裏的子串在字符串中開始開始指數末子,其中的指數字符串在字符串內結束。 String.substring()方法是一個Overloaded方法,這意味着還有其他方法具有相同的名稱,允許您以不同的方式處理字符串,因爲它們包含不同的參數要求。我們使用的方法是:

String.substring(的startIndex,endIndex的)

要得到這些指標值,我們使用字符串。indexOf()針對首次遇到的雙引號標記的方法,恰好是我們想要提取數據的位置。除非使用允許參數爲的String.indexOf()方法的重載版本,否則String.indexOf()方法始終會檢索在其所應用的字符串內遇到的第一個提供項目的索引。是的,String.indexOf()方法也Overloaded和我們使用它的兩個版本:

String.indexOf(字符串)

方法和

String.indexOf(String,fromIndex)

方法。我們使用fromIndex以確保我們捕獲雙引號標記字符串內實際第一個雙引號標記。

在現實中,我們可以這樣做既使用String.substring()String.indexOf()方法,因爲它看起來像您的數據串將始終遵循相同的數據格式另一種方式:

String myString = "<option value=\"BA7233_550\" data-maxavailable=\"22.0\" data-maxorderqty=\"10.0\" data-status=\"IN_STOCK\" data-context=\"sizes:36\"> 37 1/3"; 
String value = myString.substring(myString.indexOf("<option value=\"")+15, 
       myString.indexOf("\" data-maxavailable=")); 

在這個例子中,我也顯示了你提供的字符串,我們正在爲清晰起見而工作。您也可以很快看到我們只使用了一種類型的String.indexOf()方法,這是因爲您的數據字段名稱在字符串中是唯一的。讓我們爲String.substring()方法指標,我們只是使用String.indexOf(字符串)方法和參數我們簡單地提供地方之間我們所期望的數據奠定了字段名。

你還注意到了+15嗎?我們需要將15添加到索引值,因爲String.indexOf()方法將始終提供從工作String(myString)中開始提供的字符串參數開始的位置的索引。由於字符串我們提供給String.indexOf()方法是15個字符長,我們需要的是添加到返回的索引值(注:我們不作爲字符計數轉義字符(\))。這是沒有必要爲我們的String.substring()方法endIndex的說法。

利用這一原理可以基本拔出你的工作字符串喜歡的任何數據。比方說,我們希望這是工作柱內有關數據狀態=字段中的數據:

String status = myString.substring(myString.indexOf("data-status=\"")+13, 
       myString.indexOf("\" data-context=")); 

這有什麼\」所有的地方?

要表示Java字符串中的雙引號,必須使用反斜槓(\)的轉義字符進行轉義。一般來說,當從一個文件處理字符串時,Java爲你處理這個問題,但是當你爲它們編碼時你需要知道它。爲了確保您的字符串這意味着可以包含雙引號是正確轉義,你可以這樣做:

myString = myString.replaceAll("\"","\\\""); 

現在你可以讓自己的自定義解析器(或任何:/)。

0

我假設您的問題中的XML片段是有效的XML文檔的一部分。爲了閱讀XML,您應該使用XML解析器and not a regular expression

下面是使用XML解析器獲得該值的例子(注意,我添加了關閉選項標籤,最後才能使字符串有效的XML):

String xmlString = "<option value=\"BA7233_550\" data-maxavailable=\"22.0\" data-maxorderqty=\"10.0\" data-status=\"IN_STOCK\" data-context=\"sizes:36\"> 37 1/3 </option>"; 
InputSource is = new InputSource(new StringReader(xmlString)); 
DOMParser dp = new DOMParser(); 
dp.parse(is); 
Document doc = dp.getDocument(); 
NodeList nl = doc.getElementsByTagName("option"); 
NamedNodeMap nnm = nl.item(0).getAttributes(); 
String value = nnm.getNamedItem("value").getFirstChild().getTextContent();