Java 我的模式有什么问题?

Java 我的模式有什么问题?,java,regex,pattern-matching,Java,Regex,Pattern Matching,这是我的代码。我试图找出一个由两个字母和一个数字组成的图案。为什么我从getNextData()函数中没有得到任何东西/空数组?在表达式中: public class FileParser { private String filename = "mydata.txt"; private Pattern pattern = Pattern.compile("\\D\\D\\d+"); private Scanner reader; public FileParser() throws Fil

这是我的代码。我试图找出一个由两个字母和一个数字组成的图案。为什么我从getNextData()函数中没有得到任何东西/空数组?

在表达式中:

public class FileParser {

private String filename = "mydata.txt";
private Pattern pattern = Pattern.compile("\\D\\D\\d+");
private Scanner reader;

public FileParser() throws FileNotFoundException{
    reader = new Scanner(new File(filename));
}

public boolean hasMoreData(){
    return reader.hasNext(pattern);
}

public String[] getNextData(){

    return pattern.split(reader.next(pattern));
}

public void close(){
    reader.close();
}
}
reader.next(pattern)
返回该模式的下一次出现,例如“AB123”

但是,
pattern.split
则是将该字符串围绕该模式拆分,并返回其两侧的文本。当然,两边都没有文本,因为分隔符“AB123”是整个字符串


是否只返回字符串“AB123”?您可能只需返回
阅读器的结果。在这种情况下,下一步

我认为您的正则表达式有缺陷。我相信你想要

    pattern.split(reader.next(pattern));
Scanner.hasNext(模式)
搜索分隔符之间开始的模式。在您的情况下,分隔符是一个
|
。但扫描器的默认分隔符是空白。您必须手动将分隔符更改为
|
或完全忽略分隔符。下面是一个使用
Scanner.findWithinHorizon
的示例,它不关心分隔符:

private Pattern pattern = Pattern.compile("\\w{2}\\d");

你能发布文件“mydata.txt”或片段吗?mydata.txt中有什么?是否可以访问?尝试将其替换为文件的绝对路径,以查看是否存在文件路径问题(不要忘记在Windows上将斜杠加倍)。该文件与src文件夹位于同一位置。这不会有什么大不了的吧?数据模式看起来像AZ123;字符,字符,整数。我应该用Scanner的next和delimeter来表示条形符号|,对吗?所以我只需要自己把它分开?我还是什么都没有得到。它找不到任何数据。问题是:为什么要返回字符串数组?您希望在该字符串数组中包含什么?它应该正好是一个包含字符串“AB123”的元素吗?如果是这样,为什么不让方法getNextData返回字符串呢?还有:mydata.txt中的数据是什么样子的?在mydata.txt中有空白吗?我想把数据分开。我以为斯普利特会帮我的。我希望它被两个字符和int分开。我对它进行了修改,以使字符分开,但确实是这样。非常感谢。为什么您认为hasNext()在此实例中不起作用?添加了关于hasNext()作用的说明。
public class FileParserExample {
    private Pattern pattern = Pattern.compile("([a-zA-Z]{2})(\\d+)");
    private Scanner reader;


    public FileParserExample(String filename) throws FileNotFoundException {
        reader = new Scanner(new File(filename));
    }

    public boolean hasMoreData() {
        String textFound = reader.findWithinHorizon(pattern, 0);
        return textFound != null;
    }

    public String[] getNextData() {
        MatchResult match = reader.match();
        String [] pieces = {match.group(1), // AB
                            match.group(2) }; // 123
        return pieces;
    }

    public void close() {
        reader.close();
    }

    public static void main(String[] args) throws FileNotFoundException {
        String filename = "mydata.txt";
        FileParserExample parser = new FileParserExample(filename);

        while (parser.hasMoreData()) {
            System.out.println(Arrays.toString(parser.getNextData()));
        }

        parser.close();

    }
}