web-dev-qa-db-fra.com

Comment déclarez-vous un tableau de chaînes de taille inconnue?

Duplicata possible:
Déclaration d'un tableau de taille inconnue

Je travaille dans Java et j'essaie de saisir une phrase dans un tableau de chaînes. Je la tokenise et détermine le nombre de mots. Cependant, je dois ajouter chaque mot dans un tableau de chaînes afin de déterminer s'il y a des doublons ou non. Je ne sais pas comment initialiser mon tableau si je ne connais le nombre de mots que plus tard dans le programme.

  //Declares variables
  Scanner scan = new Scanner (System.in);
  int withoutdup = 0, wordCount = 0;
  String line, Word; 
  StringTokenizer tokenizer;
  List<String> sentence = ArrayList<String>;

  //Asks user for input
  System.out.println ("Please enter text. Enter DONE to finish.");
  line = scan.next();


  //Tokenizes the string and counts the number of character and words
while (!line.equals("DONE"))
 {
     tokenizer = new StringTokenizer (line);
     while (tokenizer.hasMoreTokens())
     {
        Word = tokenizer.nextToken();
        wordCount++;
        sentence += Word; 
     }
     line = scan.next();
 }
18
user1755178

Utilisez un ArrayList à la place

List<String> list = new ArrayList<String>();

il se développe automatiquement.

Pour vérifier les doublons, vous pouvez utiliser un Set (HashSet), il n'autorise pas les éléments en double.

Mise à jour

Je vois quelques problèmes dans votre code:

List<String> sentence = ArrayList<String>;

Vous manquez le new après =.

sentence += Word;

Cela ne fonctionnerait que si sentence était un String. C'est un List vous devez donc utiliser la méthode List.add

sentence.add(Word);

De plus, wordCount++; Est désormais redondant sentence.size() vous indiquera le nombre de mots.

31
Bhesh Gurung

voyez juste l'exemple ci-dessous, vous aurez une idée sur la façon de déclarer un tableau de chaînes de taille inconnue.

Tout d'abord, utilisez ArrayList pour stocker les chaînes et à chaque appel de la méthode .add, la taille ArrayList augmente d'un élément. Lorsque vous remplissez ArrayList, utilisez la méthode ArrayList size () et créez votre tableau String et dimensionnez-le à partir de. Mais assurez-vous que chaque élément d'une liste de tableaux est un objet, c'est pourquoi vous devez convertir chaque élément en chaîne.

Exemple:

ArrayList list = new ArrayList();

for( int i = 0; i < 100; i++ )

list.add( "stuff" );

String[] strArray = new String[ list.size() ];

for( int j = 0; j < strArray.length; j++ )

strArray[ j ] = list.get( j ).toString();

J'espère que cela vous aidera. C’est juste une façon, mais je pense qu’il pourrait y avoir une autre manière plus efficace de faire la même chose.

6
Jessica Eldridge

Utilisez une structure dynamique qui peut rétrécir et croître au besoin, ArrayList serait un bon choix, par exemple.

2
Juvanis

Pas possible, les tableaux sont de longueur constante. Il vaut mieux utiliser Java.util.List implémentation comme ArrayList,LinkedList etc...

Si vous souhaitez persister avec le tableau, vous pouvez utiliser une telle fonction pour redimensionner votre tableau, mais là encore, il créera un nouveau tableau avec une nouvelle taille et copiera la valeur des tableaux précédents.

private static Object resizeArray (Object oldArray, int newSize) {
   int oldSize = Java.lang.reflect.Array.getLength(oldArray);
   Class elementType = oldArray.getClass().getComponentType();
   Object newArray = Java.lang.reflect.Array.newInstance(
         elementType, newSize);
   int preserveLength = Math.min(oldSize, newSize);
   if (preserveLength > 0)
      System.arraycopy(oldArray, 0, newArray, 0, preserveLength);
   return newArray; 
}
2