[英]How to extract specific parts of a string 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 并将其保存到变量中。
请你帮助我好吗?
您可以使用以下任一String
类方法获取String
的一部分:
substring(int firstIndex)
substring(int firstIndex, int lastIndex)
您可以使用以下代码提取所需的字符串部分(该部分保存到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);
如果你想要一些简单的东西:
String value = myString.substring(myString.indexOf("\"")+1,
myString.indexOf("\"", myString.indexOf("\"")+1));
上面的代码结合使用String.substring()方法和String.IndexOf()方法。 由于您要从字符串中提取的数据是字符串中包含的第一位数据,带有双引号,因此相对容易。
在上面的示例代码中,我们使用String.substring()方法从字符串中收集我们的子字符串。 要获得这个子字符串,我们需要提供带有两个特定参数的String.substring()方法,子字符串在字符串中开始位置的起始索引和子字符串在字符串中结束位置的结束索引。 String.substring() 方法是一个重载方法,这意味着还有其他具有相同名称的方法允许您以稍微不同的方式操作字符串,因为它们包含不同的参数要求。 我们使用的方法是:
String.substring(startIndex, endIndex)
为了获得这些索引值,我们对首先遇到的双引号使用String.indexOf()方法,这恰好是我们想要提取数据的地方。 String.indexOf()方法始终检索在应用它的字符串中遇到的第一个提供项的索引,除非您使用 String.indexOf() 方法的重载版本,该方法允许fromIndex参数。 是的,String.indexOf() 方法也是重载的,我们使用了它的两个版本:
这
String.indexOf(String)
方法和
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 字符串中表示双引号,它们必须用转义字符转义,即反斜杠 (\\)。 通常,Java 在处理文件中的字符串时会为您处理这些问题,但您在为它们编码时需要注意这一点。 为确保正确转义包含双引号的字符串,您可以执行以下操作:
myString = myString.replaceAll("\"","\\\"");
现在您可以制作自己的自定义解析器(或任何 :/ )。
我假设您问题中的 XML 片段是有效 XML 文档的一部分。 为了读取 XML,您应该使用 XML 解析器而不是正则表达式。
这是使用 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();
使用字符串方法
要获取字符串的一部分,请使用该方法
<your string>.substring(<start index>, <end index>)
此外,您可以使用该方法
<your string>.indexOf(<character>)
为了获得给定字符的索引。 如果您不知道它们或想要使用字符作为参考,这可以帮助您找到字符串的索引值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.