gpt4 book ai didi

java - 恰好 n 次 - 组

转载 作者:行者123 更新时间:2023-12-01 15:16:01 28 4
gpt4 key购买 nike

我想从具有模式的行中取出数字,但它不会按照我的意愿对数字进行分组。

public static void main(String[] args) {
Pattern pattern = Pattern.compile("(.*?)((\\d+),{0,1}\\s*){7}");
Scanner in = new Scanner("text: 1, 2, 3, 4, 5, 6, 7"); // new Scanner(new File("data.txt"));
in.useDelimiter("\n");

try {
while(!(in.hasNext(pattern))) {
//Skip corrupted data
in.nextLine();
}
} catch(NoSuchElementException ex) {
}
String line = in.next();
Matcher m = pattern.matcher(line);
m.matches();
int groupCount = m.groupCount();
for(int i = 1; i <= groupCount; i++) {
System.out.println("group(" + i + ") = " + m.group(i));
}
}

输出:

组(1) = 文本:

组(2) = 7

组(3) = 7

我想要得到的是:

组(2) = 1

组(3) = 2

...

组(8) = 7

我可以从这个图案中得到这个还是我应该制作另一个图案?

最佳答案

如果您只想收集整数,则可以使用 Matcher.find() 方法使用以下样式的模式迭代子字符串:1) 可选分隔符或换行符; 2) 可能被空格包围的整数。您根本不必管理组索引,因为您只能引用具体的捕获组。以下解决方案除了正则表达式之外不需要任何东西,只需迭代 char 序列即可查找整数:

package stackoverflow;

import java.util.ArrayList;
import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.lang.System.out;
import static java.util.regex.Pattern.compile;

public final class Q11599271 {

private Q11599271() {
}

//
// (2) Let's capture an integer number only -------------------+
// (1) Let's assume it can start with a new ------+ |
// line or a comma character | |
// +-----+-----+ +-+--+
// | | | |
private static final Pattern pattern = compile("(?:^\\S+:|,)?\\s*(\\d+)\\s*");

private static Iterable<String> getOut(CharSequence s) {
final Collection<String> numbers = new ArrayList<String>();
final Matcher matcher = pattern.matcher(s);
while ( matcher.find() ) {
numbers.add(matcher.group(1));
}
return numbers;
}

private static void display(Iterable<String> strings) {
for ( final String s : strings ) {
out.print(" ");
out.print(s);
}
out.println();
}

public static void main(String[] args) {
display(getOut("text: 1, 2, 3, 4, 5, 6, 7"));
display(getOut("1, 2, 3, 4, 5, 6, 7"));
display(getOut("text: 1, 22, 333 , 4444 , 55555 , 666666, 7777777"));
}

}

这将产生以下结果:

1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 22 333 4444 55555 666666 7777777

关于java - 恰好 n 次 - 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11599271/

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