我有String
如下:
String str = "This is something Total Toys (RED) 300,000.00 (49,999.00) This is something";
来自用户的输入是keyword
String
即。 Total Toys (RED)
我可以使用str.indexOf(keyword);
我还可以通过在上面的索引中添加关键字String
的长度来获得下一个单词的开头。
但是,如何在给定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中表格的第一列中的标题,我想要读取的下两个标记是此表格中同一行的下两列中的值。
答案 0 :(得分:3)
您可以使用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));
}
在您的示例中,%s
中的regex
将被"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
。
答案 1 :(得分:1)
这样的事情:
String remainingPart= str.substring(str.indexOf(keyWord)+keyWord.length());
StringTokenizer st=new StringTokenizer(remainingPart);
if(st.hasMoreTokens()){
Value1=st.nextToken();
}
if(st.hasMoreTokens()){
Value2=st.nextToken();
}
答案 2 :(得分:0)
试试这个,
String str ="这是Total Toys 300,000.00 49,999.00这是";
if(str.contains(keyWord)) {
String splitLine = str.split(keyword)[1];
String tokens[] = splitLine.split(" ");
String Value1 = tokens[1];
String Value2 = tokens[2];
}
答案 3 :(得分:-1)
根据您提供的内容,以下内容适用:
public static void main(String[] args)
{
String search = "Total Toys";
String str = "This is something Total Toys 300,000.00 49,999.00 This is something";
int index = str.indexOf(search);
index += search.length();
String[] tokens = str.substring(index, str.length()).trim().split(" ");
String val1 = tokens[0];
String val2 = tokens[1];
System.out.println("Val1: " + val1 + ", Val2: " + val2);
}
输出:
Val1: 300,000.00, Val2: 49,999.00