web-dev-qa-db-fra.com

Comment se rendre à un élément particulier d'une liste en java?

J'ai un fichier CSV. Il a beaucoup de lignes. Dans chaque ligne, il y a plusieurs valeurs séparées par des virgules.

J'utilise OPENCSV pour extraire des données du fichier. Je veux avoir la possibilité d'aller directement à n'importe quelle ligne particulière qui est dans la structure de données de liste.

CSVReader reader = new CSVReader(new FileReader(
                    "myfile.csv"));
            try {
                List<String[]> myEntries = reader.readAll();
                for (String[] s : myEntries) {
                    System.out.println("Next item: " + s);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

Cela imprime

Next item: [Ljava.lang.String;@6c8b058b
Next item: [Ljava.lang.String;@1b192059
Next item: [Ljava.lang.String;@e9ac0f5
Next item: [Ljava.lang.String;@51f21c50
Next item: [Ljava.lang.String;@6e20f237
Next item: [Ljava.lang.String;@34fe315d
Next item: [Ljava.lang.String;@1c5aebd9
Next item: [Ljava.lang.String;@1532021a
Next item: [Ljava.lang.String;@62803d5
Next item: [Ljava.lang.String;@2d13981b
Next item: [Ljava.lang.String;@61672bbb

Je veux savoir si, de toute façon, je pourrais accéder à des lignes individuelles, à des éléments via List.

c'est à dire

    1,2,3,4,5
    6,7,8,9,10
    11,12,13,14
    15,16,17,18

Je veux String [] nextLine = 1,2,3,4,5 (où nextLine [0] = 1 nextLine [1] = 2 etc.) et dans la prochaine itération nextLine devrait être 6,7,8,9,10 etc.

25
user244333

L'interface List prend en charge l'accès aléatoire via la méthode get - pour obtenir la ligne 0, utilisez list.get(0). Vous aurez besoin d’utiliser un accès tableau pour cela, c’est-à-dire que lines.get(0)[0] est le premier élément de la première ligne.

Voir le javadoc ici .

42
Paul Morie

La méthode toString des types de tableaux dans Java n'a pas de signification particulière, à part vous dire en quoi consiste un tableau.

Vous pouvez utiliser Java.util.Arrays.toString pour cela.

Ou si vos lignes ne contiennent que des nombres et que vous voulez une ligne comme 1,2,3,4... au lieu de [1, 2, 3, ...], vous pouvez utiliser:

Java.util.Arrays.toString(someArray).replaceAll("\\]| |\\[","")
4
Vlad

À ce point:

for (String[] s : myEntries) {
   System.out.println("Next item: " + s);
}

Vous devez joindre le tableau de chaînes dans une ligne. Check this post: ne méthode pour inverser les effets de Java String.split ()?

2
Miguel Prz

Vérifiez la fonction split de String Here , et utilisez-la comme ceci String[] results = input.split("\\s+");. Le bit d’expression régulière jaillit sur les espaces, il devrait faire l'affaire

0
dann.dev

Vous avez à peu près 98% raison. Le seul problème est que vous essayez d’imprimer une chaîne [] qui n’imprime pas comme vous le souhaitez. Au lieu d'essayer ceci ...

for (String[] s : myEntries) {
    System.out.print("Next item: " + s[0]);
    for(int i = 1; i < s.length; i++) {
        System.out.print(", " + s[i]);
    }
    System.out.println("");
}

De cette façon, vous accédez à chaque chaîne du tableau au lieu du tableau lui-même.

J'espère que cela t'aides!

0
Shaded

String [] est un tableau de chaînes. Un tel tableau est en interne une classe. Comme toutes les classes qui n'étendent pas explicitement une autre classe, Object étend implicitement. La méthode toString() de la classe Object, par défaut, vous donne la représentation que vous voyez: le nom de la classe, suivi de @, suivi du code de hachage au format hexadécimal. Puisque la classe String [] ne remplace pas la méthode toString (), vous obtenez cela en conséquence.

Créez une méthode qui affiche les éléments du tableau pour vous. Parcourez le tableau et utilisez System.out.print() (pas print * ln *) sur les éléments.

0
G_H
CSVReader reader = new CSVReader(new FileReader(
                "myfile.csv"));
        try {
            List<String[]> myEntries = reader.readAll();
            for (String[] s : myEntries) {
               for(String ss : s) {
                   System.out.print(", " + ss);
               }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
0
raj