gpt4 book ai didi

java - 从字符串中的给定单词中获取下两个单词,同时包含非字母数字字符的单词

转载 作者:行者123 更新时间:2023-11-29 05:32:55 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com