从java正则表达式文件中获取所有手机号码

从java正则表达式文件中获取所有手机号码,java,regex,Java,Regex,这是我正在使用正则表达式,但我无法得到手机号码是否在该行的开头。下面是我的文件,我现在正在获取输出 (我正在将所有mbile数字写入输出文件); 917205435005 但预计为78735534089170543505 输入: 7873553408抽象类可能有一些可执行方法 方法没有实现。接口 不包含任何实现代码。摘要 类可以有非抽象的917205435005方法。 接口的所有方法1234都是抽象的 产量:917205435005 预计产量:7873553408、7873923408、9172

这是我正在使用正则表达式,但我无法得到手机号码是否在该行的开头。下面是我的文件,我现在正在获取输出 (我正在将所有mbile数字写入输出文件); 917205435005 但预计为78735534089170543505

输入:


7873553408抽象类可能有一些可执行方法 方法没有实现。接口 不包含任何实现代码。摘要 类可以有非抽象的917205435005方法。 接口的所有方法1234都是抽象的

产量:917205435005

预计产量:7873553408、7873923408、917205435005

Pattern pattern = Pattern.compile("(0|91)?[7-9]\\d{9}(\\b|$)");

行首用插入符号表示:

FileReader fileReader = new FileReader("D://MyWork/Mobile.txt"); 
BufferedReader bufferedReader = new BufferedReader(fileReader); 
while (bufferedReader.read() != -1) { 
    String line = bufferedReader.readLine(); 
    lineNum++; 
    Pattern pattern = Pattern.compile("^(0|91)?[7-9]\\d{9}(\\b|$)"); 
    Matcher matcher = pattern.matcher(line); 
    while (matcher.find()) {
        System.out.println("at line....:" + lineNum +
                           ".....found....." + matcher.group() + 
                           "...start..." + matcher.start() +
                           "..end..." + matcher.end());
    }

要收集所有数字,需要进行
匹配器
while循环
以获得所有匹配:

Pattern pattern = Pattern.compile("^(0|91)?[7-9]\\d{9}(\\b|$)");

    我完全糊涂了。目前,您的问题有两个正则表达式:一个带锚(
    ^
    )的正则表达式,另一个不带锚。您有两个预期输出的列表:一个有两个数字的列表,一个有三个数字的列表(其中一个没有出现在您的输入文件中)

    但是,您的问题最可能的原因是:

    String line;
    while ((line = bufferedReader.readLine()) != null) {
    
    bufferedReader.read()使用一个字符,这意味着它不会出现在后续调用
    bufferedReader.readLine()
    返回的字符串中。也就是说,您阅读的行以
    873553408抽象类
    (无前导'7'!)开头,您的正则表达式将不匹配

    不要调用read()。通过BufferedReader返回的所有行进行循环的正确方法是检查readLine()是否返回null:

    while (bufferedReader.read() != -1) { 
    
    你可以试试这个正则表达式

    String line;
    while ((line = bufferedReader.readLine()) != null) {
    
    其中我假设您的国际代码是
    091
    ,国内电话号码格式是
    3位-3位-4位
    ,例如09133444555,091-333-444-5555,091333445555,33344455555,333-444-5555等等


    这还不清楚,请详细分享您尝试的全部代码7873553408抽象类可能有一些未实现的可执行方法。接口不包含实现代码。抽象类可以有非抽象的917205435005方法。接口的所有方法1234都是抽象的。您的模式似乎有效,问题是什么请共享您使用的代码,没有任何帮助。我也尝试过插入符号,如果您使用,我得到的是空输出,这可能取决于您对模式的进一步操作。@John在第一时间尝试更改(请参见编辑)谢谢……是的woking@John因此,你可以考虑接受/投票支持有用的答案,以感谢那些为你花时间的人;)当然……还有信息:关于read()和readLine(),你是如何想到这一点的?@John另一个答案让我思考,所以我试着检查一下
    String line;
    while ((line = bufferedReader.readLine()) != null) {
    
    \b(0?91)?(?:\s*-\s*|\s+)?(\d{3})(?:\s*-\s*|\s+)?(\d{3})(?:\s*-\s*|\s+)?(\d{4})\b