2015-11-15 1 views
1

J'ai un fichier .txt que je veux lire dans mon programme. Je dois prendre les valeurs pour l'achat et le prix et les stocker dans un ArrayList de nombres entiers. Par exemple:Comment stocker int à partir du fichier, à Arraylist utilisant StringTokenizer dans Java?

"acheter 50 prix 30"

Je dois insérer 50 dans le ArrayList acheter et 30 dans le prix ArrayList.

import java.io.BufferedReader; 
import java.util.StringTokenizer; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.List; 
import java.util.ArrayList; 

public class Store { 

public static void main(String[] args) { 

    BufferedReader br = null; 
    List <Integer> buy = new ArrayList<>(); 
    List <Integer> price = new ArrayList<>(); 

    // try to read the file 
    try { 

     br = new BufferedReader(new FileReader("Nets.txt")); 
     String line; 

     while ((line = br.readLine()) != null) { 
      line = line.trim(); 
      line = line.replaceAll("/t", ""); 
      line = line.toLowerCase(); 
      StringTokenizer st = new StringTokenizer(line); 
      while (st.hasMoreTokens()) { 
       //Don't know what to do 
      } 
     } 

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

} 

} 
+0

expliquer le problème, pas seulement ce que vous voulez faire – jfun

+0

De [javadoc] (http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html): * "' StringTokenizer' est une classe héritée qui est conservée pour des raisons de compatibilité bien que son utilisation soit déconseillée dans le nouveau code Il est recommandé que quiconque recherche cette fonctionnalité utilise à la place la méthode 'split' de' String' ou le paquet 'java.util.regex' . "* --- Regex serait parfait pour cela:' "(? I) \\ s * acheter \\ s + (\\ d +) \\ s + prix \\ s + (\\ d +) \\ s *" ' – Andreas

Répondre

0

Comme mentionné dans les commentaires, pensez à utiliser String.split(regex) au lieu de StringTokenizer.

Voici ce que le code pourrait ressembler à:

while ((line = br.readLine()) != null) { 
    line = line.trim(); 
    line = line.replaceAll("/t", ""); 
    line = line.toLowerCase(); 

    // New code 
    String[] tokens = line.split(" "); 
    buy.add(Integer.valueOf(tokens[1])); 
    price.add(Integer.valueOf(tokens[3])); 
} 

Cette approche donne aussi de meilleures performances parce que vous n'avez pas besoin d'itérer sur les jetons inutilisés.

0

Veuillez ne pas demander l'alimentation à la cuillère. mais là, vous pouvez faire à la suite

while (st.hasMoreTokens()) 
{ 
st.nextToken(); 
list1.add(st.nextToken()); 
st.nextToken(); 
list2.add(st.nextToken()); 
}