如果你想要一些简单的东西:
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("\"","\\\"");
现在您可以制作自己的自定义解析器(或其他任何东西:/)。