Java的扫描仪使用的分隔符(Java Scanner Delimiter Usage)

2019-08-17 17:10发布

我想指定一个分隔符为分割上的一些图案,但不从令牌删除图形的扫描仪。 我似乎无法使这项工作,因为这是由正则表达式识别的东西也被吃作为分隔符的一部分。 有什么建议?

我的具体问题,我有文件,看起来像:

text/numbers mix
numbers
numbers
text/numbers mix
numbers
numbers
numbers
.
.

我想从文本/数字混合+行,直到下一个文本/数字混合分裂出来。 我有正则表达式来识别它们,但指出,使用作为分隔符吃的我想要的一部分。

编辑:除了代码:

static final String labelRegex="\\s*[^01\\s*]\\w+\\s*";
static final Pattern labelPattern = Pattern.compile(labelRegex, Pattern.MULTILINE);

是我用来识别文本/数位模式(我知道我的号码的行包含用空格隔开的所有1/0)。

当我初始化扫描仪:

stateScan = new Scanner(new BufferedReader(new FileReader(source)));
stateScan.useDelimiter(labelPattern);

该吃的标签,只是离开行。 我现在有一个启动的两个缓冲文件阅读两个扫描仪从同一来源,一个分裂的国家和其他的唱片公司工作落实。 我真的希望它只是一个抓住标签+状态。

Answer 1:

你可以在你的正则表达式未来使用正看。 看aheads(和屁股)不包括在比赛,所以通过扫描仪,他们不会被“吃掉”。 此正则表达式可能会做你想要什么:

(?=text/numbers)

分隔符将是子串前右空字符串text/numbers

这里有一个小的演示:

public class Main {
    public static void main(String[] args) {
        String text = "text/numbers mix\n"+
                "numbers\n"+
                "numbers\n"+
                "text/numbers mix\n"+
                "numbers\n"+
                "numbers\n"+
                "numbers";
        String regex = "(?=text/numbers)";
        Scanner scan = new Scanner(text).useDelimiter(regex);
        while(scan.hasNext()) {
            System.out.println("------------------------");
            System.out.println(">"+scan.next().trim()+"<");
        }
    }
}

其产生:

------------------------
>text/numbers mix
numbers
numbers<
------------------------
>text/numbers mix
numbers
numbers
numbers<


文章来源: Java Scanner Delimiter Usage