2012-02-17 5 views
0

J'ai créé un répertoire java (application de bureau), sur mon pc il y a un programme qui affiche le numéro de l'appelant. c'est un nombre de 8 chiffres.Java: numéros de crawl

est ici comment cela fonctionne enter image description here

Je veux ramper seulement 8 chiffres des numéros dans le menu contextuel, laisse ainsi dire que c'est une fenêtre contextuelle:

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 

dans cet exemple, je veux ramper et uniquement.

Je veux vérifier la fenêtre pop-up toutes les 2 s pour de nouveaux numéros, si un appelant me appelle deux fois, son numéro sera déjà stocké ma db et sinon je vais stocker

Note: si c'est peut « t être fait, alors oublier la fenêtre contextuelle, permet de dire qu'il est juste un texte mis à jour toutes les 2 secondes, comment ramper

ce pas ses devoirs lol: D

+1

utilisant l'expression rationnelle? Pourquoi ne supporteriez-vous rien de différent de 8 dig. nombre sans espaces? consultez http://en.wikipedia.org/wiki/E.164 – hovanessyan

+0

utiliser une regexp?'\ d {8}' –

+0

Les numéros de téléphone @hovanessyan dans mon pays sont créés à partir de 8 chiffres, donc je n'ai besoin que de les saisir – Lynob

Répondre

2

Utilisez des expressions régulières Java. Créez une expression rationnelle de 8 chiffres ou plus et utilisez-la. Vous serez en mesure d'extraire ces 2 numéros de téléphone de votre échantillon de texte.

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]); 
     } 
    } 
} 
+1

Pas besoin de faire l'entreprise de fractionnement - vous pouvez utiliser Matcher.find() et une regex comme '" \\ b (\\ d {8}) \\ b "' – DNA

+0

Oui , ce serait plus clair. – Juvanis

1

Haha ... c'est donc évidemment un exercice de devoirs que vous trichez!

Votre professeur s'attend probablement à ce que vous utilisiez des expressions régulières. Si c'est au-dessus de votre tête, alors jetez un coup d'oeil aux chaînes et vérifiez chaque jeton avec Long.parseLong().

Bien sûr, ces deux approches supposent que les données seront exactement comme votre exemple ci-dessus, et ne pas avoir de tirets dans les numéros de téléphone. Si vous avez besoin de prendre en compte les tirets (ou les points, les espaces, etc.), alors la regex ou la logique manuelle devient assez complexe assez rapidement.

MISE À JOUR: Si vous ne nécessité de tenir compte des numéros de téléphone avec des tirets ou d'autres personnages en eux, je ne serais probablement:

  1. tokenize la chaîne,
  2. itérer à travers tous les jetons, en utilisant regex pour supprimer tous les caractères non numériques, et enfin
  3. utilisez regex (ou Long.parseLong() et String.length()) pour déterminer si ce qui reste est un nombre à 8 chiffres.
+0

non ce n'est pas un devoir lol !! Je suis juste nouveau à java: D – Lynob

1

Si vous voulez dire que vous voulez extraire les numéros à 8 chiffres à partir d'une chaîne de texte, vous pouvez le faire comme suit:

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)); 
     } 
    } 
} 

Voir http://docs.oracle.com/javase/tutorial/essential/regex/