2011-07-20 3 views
0

Je dois écrire une méthode de classe publique appelée getWordsInString() pour WebPageData. La méthode prend un seul argument appelé text qui doit être de type String. Le but de getWordsInString() est de renvoyer un ensemble composé des mots distict qui se trouvent dans la chaîne référencée par text.Créer un ensemble contenant les mots dans un texte

Utilisez d'abord la méthode que vous avez trouvée dans Javadoc pour la classe String qui va couper n'importe quelle chaîne en un nombre de parties en fonction de la valeur de son argument de chaîne. Utilisez cette méthode pour diviser la chaîne référencée par le texte en un tableau de mots et affecter ce tableau à une variable locale appelée wordArray. La méthode doit déclarer une variable locale capable de référencer un ensemble de chaînes et lui affecter une instance vide d'une classe appropriée. Suivant itérer sur wordArray et ajouter ses éléments à l'ensemble nouvellement créé et enfin retourner l'ensemble qui devrait contenir les mots distincts qui sont dans la chaîne référencée par le texte.

import java.util.*; 

public class WebPageData { 

private Set<String> wordSet; 
private Set<String> url; 

public Set<String> getUrl() { 
    return url; 
} 

public Set<String> getWordSet() { 
    return wordSet; 
} 

public static String getWordsInString(text) { 
    return test; 



public String[] split(String regex) { 

      private String[] wordArray; 

for (String eachText : numSet) { 
    hashSet.add(text); 
    ) 
    } 

Je suis aux prises avec cette question, aidez-moi s'il vous plaît?

+1

Qu'est-ce que peu en particulier? L'itération semble OK, et String.split est certainement l'endroit pour commencer. –

+3

Vous devez être plus précis. Qu'est-ce que vous luttez avec? Nous ne sommes pas ici pour écrire vos devoirs pour vous. – davorb

+1

Savez-vous comment diviser le texte en mots? Si non, alors jetez un oeil à «espace» (et comment le faire dans regex) – ThomasRS

Répondre

0
public Set<String> getWordSet(String input) { 
    String[] words = input.split(" "); 
    Set wordSet=new Set(); 
    for(int i =0; i<words.length;i++){//length or size() :S im not sure 
     wordSet.add(words[i]); 
    } 

    return wordSet; 
} 

je ne tester

1

Vous avez beaucoup d'erreurs syntaxiques dans votre code:

  • classe WebPageData manque accolades de fermeture.
  • La méthode getWordsInString n'a pas d'accolades fermantes.
  • La séparation de méthode est manquante fermant les accolades
  • La fonction wordArray est une variable locale qui ne doit pas utiliser le mot clé private.
  • Vous avez une parenthèse de fermeture après "hashSet.add (text);"
  • La variable hashSet n'est pas déclarée.
  • Votre méthode split indique qu'elle renvoie un tableau de chaînes mais manque une instruction return.

Pour être syntaxiquement correct, vous devriez écrire quelque chose comme:

import java.util.*; 

public class WebPageData { 

    private Set<String> wordSet; 
    private Set<String> url; 

    public Set<String> getUrl() { 
     return url; 
    } 

    public Set<String> getWordSet() { 
     return wordSet; 
    } 

    public static String getWordsInString(text) { 
     String[] wordArray; 
     return test; 
    } 

    public String[] split(String regex) { 
     String[] wordArray; 
     Set<String> hashSet = new HashSet<String>(); 

     for (String eachText : numSet) { 
      hashSet.add(text); 
     } 
     return null; 
    }  
} 

Ceci est maintenant syntaxiquement correct, mais n'est pas est que vous voulez.

Voici une méthode de getWordsInString correcte:

public Set<String> getWordsInString(String text) { 
    String[] wordArray = text.split(" "); 
    Set<String> set = new HashSet<String>(); 
    for (String currentWord : wordArray) { 
     set.add(currentWord); 
    } 
    return set; 
} 

Voici peut-être une moins verbeux façon de le faire (mais cela est que vous n'êtes pas obligé de le faire):

public Set<String> getWordsInString(String text) { 
    List<String> words = Arrays.asList(text.split(" ")); 
    return new HashSet(words); 
} 

Je préfère cette deuxième version car il concentre de ce que vous voulez, convertissez votre tableau en un ensemble. L'autre va dans le détail de l'itération de la liste complète. Vous préférerez la première version lorsque la performance est une préoccupation importante.

0
public Set<String> getWordSet(String input) { 
    return new HashSet<String>(Arrays.asList(input.split(" "))); 
} 

Il y a une pénalité de performance ici pour créer une liste (temporaire), mais pour les cas typiques, cela ne devrait pas poser de problème.

8

Vous avez seulement besoin d'une ligne de tout faire:

Set<String> set = new HashSet<String>(Arrays.asList(text.split(" +"))); 

Ou en java 8:

Set<String> set = Arrays.stream(text.split(" +")).collect(Collectors.toSet()); 
Questions connexes