gpt4 book ai didi

java - 尝试使用循环获取模式数据时出现异常

转载 作者:行者123 更新时间:2023-11-30 03:05:39 25 4
gpt4 key购买 nike

我正在使用 JAVA MAIL API 阅读邮件。到目前为止,我可以完美地获取 SKU 数据,因为邮件中只有一个 SKU ,例如:

邮件中的数据:

SKU: TX1234-3322

Quantity: 1

Price: $7.95

我获取 SKU 的代码是:

public static List<String> SKUData = new ArrayList<String>();

if(Content.contains("SKU:"))
{
Pattern pat = Pattern.compile("SKU\\s*:\\s*(\\S*)");
Matcher matcher = pat.matcher(Content);
if(matcher.find()) { //we've found a match
FinalSKU = matcher.group(1);
}

SKUData.add(FinalSKU);

最重要的是,到目前为止一切正常,但从现在开始我会在一封邮件中收到多个 SKU,所以对于前:

SKU: TX1234-3322

Quantity: 1

Price: $7.95

SKU: TX9090-8888

Quantity: 1

Price: $6.25

所以我尝试了代码:

for(int k=1;k<10;k++)
{
if(Content.contains("SKU:"))
{
Pattern pat = Pattern.compile("SKU\\s*:\\s*(\\S*)");
Matcher matcher = pat.matcher(Content);
if(matcher.find()) { //we've found a match
FinalSKU = matcher.group(k);
}

SKUData.add(FinalSKU);
}

但是这个解决方案不起作用。当我的循环达到 k=2 时,我遇到异常。

当相同的模式数据多次出现时,如何使用模式获取数据。

最佳答案

你有点误解了Matcher.group()。您需要多次调用 Matcher.find() 来查找多个结果,然后读取 Matcher.group(1) 来查找所有结果。

还有一点需要注意:不要在循环中调用 Pattern.compile,即使是在方法中也是如此。您可能没有注意到,模式的编译成本很高,但是一旦您更频繁地调用此模式,您将明显减慢程序速度。使其成为 private static final 并重用一次编译的模式。

模式中的匹配组是 () 之间的所有内容(只要它没有转义)。因此,由于您的模式是 SKU\\s*:\\s*(\\S*),您拥有的唯一匹配组是 (\\S*) 。当然,如果您需要这一行中的更多值,您可以拥有更多组,但由于 ID(或任何可能的内容)是您唯一感兴趣的内容,因此您只需要这一组。

您可以阅读有关匹配组(也称为捕获组)的更多信息 here .

关于java - 尝试使用循环获取模式数据时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34838528/

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