使用包含非字母数字字符的单词从字符串中的给定单词中获取下两个单词

时间:2013-12-10 14:14:40

标签: java string

我有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中表格的第一列中的标题,我想要读取的下两个标记是此表格中同一行的下两列中的值。

4 个答案:

答案 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