如何提取字符串JAVA的特定部分

时间:2017-02-18 18:10:56

标签: java string

例如,如果我有这个字符串:

<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 个答案:

答案 0 :(得分:0)

您可以使用以下String类方法获取String的一部分:

  1. 方法名称substring(int firstIndex)
    描述:返回此String的一部分,从firstIndex处的字符到最后一个字符(包括)。
  2. 方法名称substring(int firstIndex, int lastIndex)
    描述:将此String的一部分从firstIndex处的字符返回到lastIndex处于-1(包括)的字符。
  3. 您可以使用以下代码提取所需的字符串部分(该部分保存到 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);
    

答案 1 :(得分: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)

要获取这些索引值,我们对首次遇到的双引号使用 String.indexOf()方法,这恰好是我们想要提取数据的地方。 String.indexOf()方法总是检索在其应用的字符串中遇到的第一个提供的项的索引,除非您使用String.indexOf()方法的重载版本允许< strong> fromIndex 参数。是的,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(String)方法,作为参数,我们只提供我们所需数据的字段名称介于两者之间。

你还注意到了+15吗?我们需要将15添加到索引值,因为 String.indexOf()方法将始终提供索引,其中提供的字符串参数在工作字符串(myString)中开始。由于我们提供给 String.indexOf()方法的字符串长度为15个字符,我们需要将其添加到返回的索引值(注意:我们不将转义字符(\)计为一个角色)。对于我们的 String.substring()方法 endIndex 参数,这不是必需的。

使用这个原则,您基本上可以从工作字符串中提取您喜欢的任何数据。假设我们想要在工作字符串中与 data-status = 字段相关的数据:

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

这个“到处都是什么?”

要在Java String中表示双引号,必须使用反斜杠(\)转义字符对其进行转义。通常,Java在处理文件中的字符串时会为您处理此问题,但在编码时需要注意它。为了确保您的字符串包含双引号可以正确转义,您可以这样做:

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

现在您可以创建自己的自定义解析器(或其他:/)。

答案 2 :(得分:0)

我假设你问题中的XML片段是有效XML文档的一部分。要读取XML,您应该使用XML解析器and not a regular expression

以下是使用XML解析器获取该值的示例(请注意,我在末尾添加了close选项标记以使字符串成为有效的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();

答案 3 :(得分:0)

使用字符串方法

要获取字符串的一部分,请使用方法

<your string>.substring(<start index>, <end index>)


另外,您可以使用方法

<your string>.indexOf(<character>)
为了获得给定字符的索引。如果您不知道字符串 想要使用字符作为参考,这可以帮助您找到字符串的索引值。