【问题标题】:How to extract specific parts of a string JAVA如何提取字符串JAVA的特定部分
【发布时间】:2017-07-08 05:10:09
【问题描述】:

如果我有这个字符串:

<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 并将其保存到变量中。

你能帮帮我吗?

【问题讨论】:

  • 你看过String上的方法了吗?
  • 欢迎来到 Stack Overflow!请带上tour,四处看看,通读help center,尤其是How do I ask a good question?
  • 这在很多层面上都令人失望:(
  • 使用 String.substring() 方法和 String.indexOf() 方法是一种方法。
  • 我要做的第一件事就是寻找an XML parser。但是,如果您只需要这些,请使用正则表达式或substring

标签: java string


【解决方案1】:

使用字符串方法

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

&lt;your string&gt;.substring(&lt;start index&gt;, &lt;end index&gt;)


另外,你可以使用方法

&lt;your string&gt;.indexOf(&lt;character&gt;)
为了获取给定字符的索引。这可以帮助您找到字符串的索引值如果您不知道它们想使用字符作为参考。

【讨论】:

    【解决方案2】:

    我假设您问题中的 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();
    

    【讨论】:

      【解决方案3】:

      如果你想要一些简单的东西:

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

      上面的代码将String.substring() 方法与String.IndexOf() 方法结合使用。由于您要从字符串中提取的数据是字符串中包含双引号的数据的第一位,因此相对容易。

      在上面的示例代码中,我们使用 String.substring() 方法从字符串中收集子字符串。要获得这个子字符串,我们需要为 String.substring() 方法提供两个特定参数,即子字符串在字符串中开始位置的 Start Index结束索引 子字符串在字符串中的结束位置。 String.substring() 方法是一个Overloaded 方法,这意味着还有其他同名的方法允许您以不同的方式操作字符串,因为它们包含不同的参数要求。我们使用的方法是:

      String.substring(startIndex, endIndex)

      为了获得这些索引值,我们使用 String.indexOf() 方法来处理第一次遇到的双引号,这恰好是我们想要提取数据的位置。 String.indexOf() 方法总是检索在它所应用的字符串中遇到的第一个提供项的索引,除非您使用 String.indexOf() 方法的重载版本,它允许 fromIndex 参数。是的,String.indexOf() 方法也是Overloaded,我们使用了它的两个版本:

      String.indexOf(String)

      方法和方法

      String.indexOf(String, fromIndex)

      方法。我们使用 fromIndex 以确保我们在字符串中实际的第一个双引号之后 捕获双引号。

      实际上,我们可以使用 String.substring()String.indexOf() 方法以另一种方式完成此操作,因为它看起来像 em> 您的数据字符串将始终遵循相同的数据格式:

      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 字符串中表示双引号,必须使用转义字符进行转义,即反斜杠 (\)。通常,Java 在处理文件中的字符串时会为您处理这一点,但在为它们编码时需要注意这一点。为确保包含双引号的字符串被正确转义,您可以这样做:

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

      现在您可以制作自己的自定义解析器(或其他任何东西:/)。

      【讨论】:

        【解决方案4】:

        您可以使用以下任一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);
        

        【讨论】:

        • 我认为将 15 和 25 这样的幻数放入代码中并不是一个好主意。如果 option value 字段包含 BA7233_550673 的值怎么办?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        • 2014-09-13
        • 2015-02-03
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        • 2017-12-22
        相关资源
        最近更新 更多