2010-12-02 10 views
3

Supposons qu'il y ait un fichier nommé SUN.txtComment lire une chaîne (fichier) à tableau en Java

fichier contient: a, b, dd, art,

Je veux faire un tableau dynamique en fonction du nombre d'attributs dans le fichier. Si ther est un caractère après la virgule alors le tableau sera de 0-4 ie de la longueur 5. Dans le cas mentionné ci-dessus il n'y a pas Char qui retourne 0-3 Tableau de longueur 4. Je veux lire la valeur NULL après la virgule aussi .

Comment faire cela?

Sundhas

+1

Je ne comprends pas la partie "NULL après la virgule" ... –

Répondre

4

Vous devriez penser à

  • lecture du fichier dans une chaîne
  • Fractionnement du fichier par le séparateur « »
  • l'aide d'une liste pour ajouter les caractères et convertir la liste à un tableau, lorsque la liste est remplie
+0

Je l'ai renversé par, et j'ai lu que tout le problème de tableau est que le tableau arrive avec un index de moins. – Sundhas

+0

@Sundhas, si vous utilisez 'String.split (", ")' avec chaque ligne, vous pouvez trouver le besoin de passer '-1' au paramètre limit, comme dans' String.split (","),, -1) 'pour obtenir l'élément avec la chaîne vide à la fin. Voir la réponse que j'ai posté. –

0

Pour votre structure de données, utilisez une liste de baies. Chaque entrée de la liste est une ligne de votre fichier texte, chaque entrée est un tableau qui contient les valeurs séparées par des virgules:

List<String[]> data = new ArrayList<String[]>(); 
String line = readNextLine(); // custom method, to be implemented 
while (line != null) { 
    data.add(line.split(",")); 
    line = readNextLine(); 
} 

(en supposant, que le fichier contient des lignes 1..n de valeurs séparées par des virgules)


Vous voudrez peut-être comme ceci:

"a,b,c,d," -> {"a", "b", "c", "d", null} 

Voici une suggestion comment résoudre ce problème:

List<String[]> data = new ArrayList<String[]>(); 
String line = readNextLine(); // custom method, to be implemented 
while (line != null) { 
    String[] values = new String[5]; 
    String[] pieces = line.split(","); 
    for (int i = 0; i<pieces.length; i++) 
    values[i] = pieces[i]; 
    data.add(values); 

    line = readNextLine(); 
} 
0

son semble comme un fichier CSV quelque chose comme cela fonctionnera en supposant qu'il dispose de 5 lignes et 5 valeurs

String [][] value = new String [5][5]; 
File file = new File("SUN.txt"); 
BufferedReader br = new BufferedReader(new FileReader(file)); 
String line = null; 
int row = 0; 
int col = 0; 

while((line = br.readLine()) != null){ 
StringTokenizer s = new StringTokenizer(line,","); 

    while (s.hasMoreTokens()){ 
    value[row][col] = s.nextToken(); 
    col++; 
} 
col = 0; 
row++; 
} 

i nai testé ce code

3

Comme Markus dit, vous voulez faire quelque chose comme ça ..

//Create a buffred reader so that you can read in the file 
    BufferedReader reader = new BufferedReader(new FileReader(new File(
      "\\SUN.txt"))); 
    //The StringBuffer will be used to create a string if your file has multiple lines 
    StringBuffer sb = new StringBuffer(); 
    String line; 

    while((line = reader.readLine())!= null) 
    { 
     sb.append(line); 
    } 

    //We now split the line on the "," to get a string array of the values 
    String [] store = sb.toString().split(","); 

Je ne comprends pas vraiment pourquoi vous voudriez le NULL après la virgule? Je suppose que vous voulez dire que, après la dernière virgule, vous voulez que cela soit nul dans votre tableau? Je ne vois pas très bien ce que cela veut dire, mais ce n'est pas la question.

Si tel n'est pas le cas, vous ne pourrez pas lire une valeur NULL si, après la virgule, il y avait un espace, vous pouvez le lire.

Si vous souhaitez un NULL vous devez l'ajouter en vous-même à la fin pour que vous puissiez faire quelque chose comme

//Create a buffred reader so that you can read in the file 
    BufferedReader reader = new BufferedReader(new FileReader(new File(
      "\\SUN.txt"))); 
    //Use an arraylist to store the values including nulls 
    ArrayList<String> store = new ArrayList<String>(); 
    String line; 
    while((line = reader.readLine())!= null) 
    { 
     String [] splitLine = line.split(","); 
     for(String x : splitLine) 
     { 
      store.add(line); 
     } 
     //This tests to see if the last character of the line is , and will add a null into the array list 
     if(line.endsWith(",")) 
      store.add(null); 
    } 

    String [] storeWithNull = store.toArray(); 
+1

La réponse est bien, mais pourriez-vous s'il vous plaît supprimer le "C: \\"? C'est un Windows gratuit qui n'est pas pertinent pour la question. Peut-être que je dis ça seulement parce qu'il est 4 heures du matin. –

+0

Désolé, enlevé le C: \\ du code, c'était juste une habitude de tester et je ne savais même pas que je l'ai fait: P –

0

Lire le fichier, en utilisant BufferedReader, une ligne à l'époque.

Utilisez split(",", -1) pour convertir un tableau de String[] en incluant également des chaînes vides au-delà de la dernière virgule dans le cadre de votre tableau. Chargez les pièces String[] dans un List.

Questions connexes