Java:爬网号码

Java:爬网号码,java,web-crawler,Java,Web Crawler,我创建了一个java电话簿(桌面应用程序),在我的电脑上有一个程序可以输出呼叫者的号码。这是一个8位数的数字 下面是它的工作原理 我只想从弹出窗口中抓取8位数字,所以假设这是一个弹出窗口: My name is someone like you, i am 22 years old, i was born in 19/10/1989, my phone number is 34544512 my brother is someone like me he is 18 ye

我创建了一个java电话簿(桌面应用程序),在我的电脑上有一个程序可以输出呼叫者的号码。这是一个8位数的数字

下面是它的工作原理

我只想从弹出窗口中抓取8位数字,所以假设这是一个弹出窗口:

    My name is someone like you, i am 22 years old, i was born in 19/10/1989,
    my phone number is 34544512
    my brother is someone like me he is 18 years old, born in 9101993 
    his number is 07777666
在本例中,我只想爬网0777766634544512

我想每隔2秒检查一次弹出窗口中的新号码,如果来电者给我打了两次电话,他的号码将已存储在我的数据库中,如果没有,我将存储

注意:如果做不到,那么忘记弹出窗口,假设它只是一个文本,每2秒更新一次,如何抓取它


这不是家庭作业哈哈。。。这显然是一个家庭作业练习,你在作弊

你的教授可能希望你使用正则表达式。如果这超出了您的理解范围,那么只需对字符串进行标记,并使用
Long.parseLong()
检查每个标记即可

当然,这两种方法都假设数据与上面的示例完全相同,并且电话号码中没有破折号。如果需要考虑破折号(或点、空格等),那么正则表达式或手动逻辑很快就会变得非常复杂

更新:如果您需要说明带有破折号或其他字符的电话号码,我可能会:

  • 将字符串标记化
  • 遍历所有标记,使用正则表达式删除所有非数字字符,最后
  • 使用正则表达式(或
    Long.parseLong()
    String.length()
    )确定剩下的是否是8位数字

  • 哈哈。。。这显然是一个家庭作业练习,你在作弊

    你的教授可能希望你使用正则表达式。如果这超出了您的理解范围,那么只需对字符串进行标记,并使用
    Long.parseLong()
    检查每个标记即可

    当然,这两种方法都假设数据与上面的示例完全相同,并且电话号码中没有破折号。如果需要考虑破折号(或点、空格等),那么正则表达式或手动逻辑很快就会变得非常复杂

    更新:如果您需要说明带有破折号或其他字符的电话号码,我可能会:

  • 将字符串标记化
  • 遍历所有标记,使用正则表达式删除所有非数字字符,最后
  • 使用正则表达式(或
    Long.parseLong()
    String.length()
    )确定剩下的是否是8位数字

  • 使用Java正则表达式。创建一个8位或更多位的正则表达式并使用它。您将能够从文本样本中提取这两个电话号码

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Test {
        public static void main(String args[]) throws Exception {
            String testString = "My name is someone like you, i am 22 years old, i was born in 19/10/1989,"
                              + " my phone number is  34544512 3454451266"
                              + " my brother is someone like me he is 18 years old, born in 9101993 "
                              + " his number is 07777666";
    
            String[] pieces = testString.split("\\s+");
            String expression = "\\d{8,}";
            Pattern pattern = Pattern.compile(expression);
            for (int i = 0; i < pieces.length; i++) {
                if (pattern.matches(expression, pieces[i]))
                    System.out.println(pieces[i]);
            }
        }
    }
    
    import java.util.regex.Matcher;
    导入java.util.regex.Pattern;
    公开课考试{
    公共静态void main(字符串args[])引发异常{
    String testString=“我的名字和你一样,我今年22岁,出生于1989年10月19日。”
    +“我的电话号码是3454451513454451266”
    +“我哥哥和我一样他18岁,1993年出生”
    +“他的电话号码是07777666”;
    String[]pieces=testString.split(\\s+);
    字符串表达式=“\\d{8,}”;
    Pattern=Pattern.compile(表达式);
    对于(int i=0;i
    使用Java正则表达式。创建一个8位或更多位的正则表达式并使用它。您将能够从文本样本中提取这两个电话号码

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Test {
        public static void main(String args[]) throws Exception {
            String testString = "My name is someone like you, i am 22 years old, i was born in 19/10/1989,"
                              + " my phone number is  34544512 3454451266"
                              + " my brother is someone like me he is 18 years old, born in 9101993 "
                              + " his number is 07777666";
    
            String[] pieces = testString.split("\\s+");
            String expression = "\\d{8,}";
            Pattern pattern = Pattern.compile(expression);
            for (int i = 0; i < pieces.length; i++) {
                if (pattern.matches(expression, pieces[i]))
                    System.out.println(pieces[i]);
            }
        }
    }
    
    import java.util.regex.Matcher;
    导入java.util.regex.Pattern;
    公开课考试{
    公共静态void main(字符串args[])引发异常{
    String testString=“我的名字和你一样,我今年22岁,出生于1989年10月19日。”
    +“我的电话号码是3454451513454451266”
    +“我哥哥和我一样他18岁,1993年出生”
    +“他的电话号码是07777666”;
    String[]pieces=testString.split(\\s+);
    字符串表达式=“\\d{8,}”;
    Pattern=Pattern.compile(表达式);
    对于(int i=0;i
    如果您的意思是要从文本字符串中提取8位数字,则可以按如下操作:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Regex
    {
        public static void main(String[] args)
        {
            Matcher m = Pattern.compile("\\b(\\d{8})\\b").matcher(
                    "Hello 12345678 world 23456789");
            while (m.find())
            {
                System.out.println(m.group(1));
            }
        }
    }
    

    请参见

    如果您的意思是要从文本字符串中提取8位数字,则可以按如下操作:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Regex
    {
        public static void main(String[] args)
        {
            Matcher m = Pattern.compile("\\b(\\d{8})\\b").matcher(
                    "Hello 12345678 world 23456789");
            while (m.find())
            {
                System.out.println(m.group(1));
            }
        }
    }
    

    请参见使用正则表达式?为什么你不支持任何不同于8挖的东西呢。没有空格的数字?看看@Hovanesyan在我的国家的电话号码是由8位数字组成的,所以我只需要得到它们。是的,但有些人可能会在组中键入空格、破折号,包括国际代码(使用+符号)等。@Hovanesyan很好,至少我不想抓取少于8位数的数字:D@SomeoneLikeYou查看我的代码片段,它包含8个或更多数字。使用正则表达式?为什么你不支持任何不同于8挖的东西呢。没有空格的数字?看看@Hovanesyan在我的国家的电话号码是由8位数字组成的,所以我只需要得到它们。是的,但有些人可能会在组中键入空格、破折号,包括国际代码(使用+符号)等。@Hovanesyan很好,至少我不想抓取少于8位数的数字:D@SomeoneLikeYou查看我的代码片段,它可以处理8个或更多的数字。无需执行拆分业务-您可以使用Matcher.find()和类似
    “\\b(\\d{8})\\b”
    的正则表达式-无需执行拆分业务-您可以使用Matcher.find()和一个类似正则表达式的