我有一个 String
如下:
String str = "This is something Total Toys (RED) 300,000.00 (49,999.00) This is something";
来自用户的输入将是一个关键字
String
即。 玩具总数(红色)
我可以使用 str.indexOf(keyword);
我还可以通过将关键字 String
的长度添加到上述索引来获取下一个单词的开头。
但是,如何获取给定字符串中关键字后的下两个标记,它们是我想要的值?
if(str.contains(keyWord)){
String Value1 = // what should come here such that value1 is 300,000.00 which is first token after keyword string?
String Value2 = // what should come here such that value2 is (49,999.00) which is second token after keyword string?
}
上下文:使用 PDFBox 阅读 PDF。上面的关键字是 PDF 表格第一列中的标题,接下来我要读取的两个标记是该表格中同一行接下来两列中的值。
最佳答案
您可以使用 regular expressions去做这个。这将适用于后跟两个标记的关键字的所有实例,如果关键字后面没有跟两个标记,则它将不匹配;但是,这很容易适应,因此请说明您是否要在关键字后跟 0 或 1 个标记的情况下进行匹配。
String regex = "(?i)%s\\s+([\\S]+)\\s+([\\S]+)";
Matcher m = Pattern.compile(String.format(regex, Pattern.quote(keyword))).matcher(str);
while (m.find())
{
System.out.println(m.group(1));
System.out.println(m.group(2));
}
在您的示例中,regex
中的 %s
将被替换为 "Total Toys"
,给出:
300,000.00
49,999.00
(?i)
表示不区分大小写
\\s
表示空格
\\S
表示非空白
[...]
是 character class
+
表示1个或多个
(...)
是一个捕获组
编辑:
如果您想使用带有正则表达式固有的特殊字符的关键字,那么您需要使用Pattern.quote()
。例如,在正则表达式中,(
和 )
是特殊字符,因此带有它们的关键字将导致正则表达式不正确。 Pattern.quote()
将它们解释为原始字符,因此它们将在正则表达式中转义,即更改为 \\(
和 \\)
.
如果你想要三个组,使用这个:
String regex = "%s\\s+([\\S]+)\\s+([\\S]+)(?:\\s+([\\S]+))?";
注意:如果后面只有两个组,组 (3) 将为 null
。
关于java - 从字符串中的给定单词中获取下两个单词,同时包含非字母数字字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496786/