2015-03-26 1 views
0

J'utilise un code simple avec trois boucles pour obtenir des phrases de la liste de tableaux, les numériser, supprimer les mots vides et stocker le reste dans un tableau à deux dimensions.Analyse des mots vides à l'aide d'une liste de tableaux

PhraseList est la liste de tableaux. Stopwords est le tableau contenant la liste des mots vides.

Le programme vise à prendre chaque phrase supprimer les mots vides et enregistrer le reste dans un tableau. Voici le code:

String[][] trim=new String[sentenceList.size()][largest]; 
    StringTokenizer st1; 
    for(int i=0;i<sentenceList.size();i++) 
    { 
     st1= new StringTokenizer(sentenceList.get(i)," ,(){}[]/.;:'&?!"); 
     int count=st1.countTokens(); 
     for(int j=0;j<count;j++) 
     { 
      String token=st1.nextToken(); 
      for(int k=0;k<stopwords.length;k++) 
      { 
      if(token.equals(stopwords[k])) 
       continue; 
      else 
       trim[i][j]=token; 
      }     
     } 
    } 
    //PRINT CHECK 
    for(int i=0;i<sentenceList.size();i++) 
    { 
     for(int j=0;j<largest;j++) 
     { 
      if(trim[i][j]!=null) 
      System.out.print(trim[i][j]+" "); 
     } 
    System.out.println(); 

L'élément déroutant est que ces exigences ne fonctionne pas, mais si j'échange le cas et la partie sinon il fonctionne et je ne reçois que les mots vides.

+0

On dirait que votre 'trim [i] [j] = token;' est au mauvais endroit. Vous voulez faire cela si le jeton est AUCUN des mots vides. Mais vous l'attribuez s'il y a un mot qui ne correspond pas au jeton. –

+0

Utilisez-vous un tableau pour les mots d'arrêt? Un ensemble serait une meilleure idée. – RealSkeptic

+0

@DavidWallace: Cela a été mon erreur. Je vais le changer. Je vous remercie. –

Répondre

0

Si je vous ai bien compris, c'est ce dont vous avez besoin ... Le problème était que vous étiez en train d'ajouter des mots à l'intérieur de la 3ème boucle. Vous devriez vérifier la condition dans la 3ème boucle, sortir à la 2ème boucle avec break et ensuite traiter le mot (ajouter dans ce cas).

String[][] trim=new String[sentenceList.size()][largest]; 
StringTokenizer st1; 
boolean isStop; 
for(int i=0;i<sentenceList.size();i++) 
{ 
    st1= new StringTokenizer(sentenceList.get(i)," ,(){}[]/.;:'&?!"); 
    int count=st1.countTokens(); 
    for(int j=0;j<count;j++) 
    { 
     isStop = false; 
     String token=st1.nextToken(); 
     for(int k=0;k<stopwords.length;k++) 
     { 
      if(token.equals(stopwords[k])) { 
       isStop = true; 
       break; 
      } 
     } 
     if(isStop) 
      continue; 
     else { 
      trim[i][j]=token; 
     }     
    } 
} 
//PRINT CHECK 
for(int i=0;i<sentenceList.size();i++) 
{ 
    for(int j=0;j<largest;j++) 
    { 
     if(trim[i][j]!=null) 
     System.out.print(trim[i][j]+" "); 
    } 
    System.out.println(); 
} 
+0

J'ai essayé ceci. Maintenant, il n'y a rien dans le tableau de trim. –

+0

Avez-vous débogué? Est-ce que trim array est vide avant l'impression ou que la sortie d'impression est vide? Je viens de l'essayer et ça marche pour moi! –

+0

J'ai repéré l'erreur. J'avais initié le booléen à faux en dehors de la boucle. –