2015-03-02 3 views
0

Я пытаюсь выполнить очень простую задачу, но я не получаю результаты, которые я хочу. У меня есть текстовый файл с именами, разделенными запятой по кратным линиям, и я хочу сохранить эту информацию в массиве 1D. Когда я запускаю свой код и пытаюсь распечатать массив, чтобы убедиться, что моя информация записана, консоль выводит только последнюю строку текстового файла. Что не так с моим кодом? Я пробовал играть с ним, но я не нашел решения для своей проблемы. Переписывается ли информация?Чтение файла на Java с помощью StringTokenizer

import java.util.*; 

public class Tokens { 
public static TextFileInput myFile; 
public static StringTokenizer myTokens; 
public static String name; 
public static String[] names; 
public static String line; 

public static void main(String[] args) { 

myFile = new TextFileInput("namesofstudents.txt"); 

    while ((line = myFile.readLine())!= null) {  
    int i=0;  

    myTokens = new StringTokenizer(line, ","); 
    names = new String[myTokens.countTokens()]; 

     while (myTokens.hasMoreTokens()){ 
      names[i] = myTokens.nextToken(); 
      i++; 
    }   
    }  

for (int j=0;j<names.length;j++){ 
    System.out.println(names[j]);  
} 


    } 
} 

пример ввода:

Mark, Joe, Bob 
    James, Jacob, Andy, Carl 

выход:

James 
Jacob 
Andy 
Carl 

ответ

0

Вы перезагружать подсчет и переписывание names на каждой строке.

Попробуйте создать names как ArrayList.

ArrayList<String> names; 

Инициализировать его раз за пределами первой петли, как это:

names = new ArrayList<String>(); 

Тогда каждый раз, когда вы обычно поставить имя в массиве заменить эту строку:

names[i] = myTokens.nextToken(); 

С:

names.add(myTokens.nextToken()); 
+0

спасибо, наконец, Ой! – user23429

1

код инициализирует i к 0 в начале каждой строки. Сделайте это в начале пробега.

1

Рассмотрим с помощью ArrayList, который делает жизнь проще ...

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

while ((line = myFile.readLine())!= null) {   

myTokens = new StringTokenizer(line, ",");  

    while (myTokens.hasMoreTokens()){ 
     names.add(myTokens.nextToken()); 
    }   
}  

System.out.println(names);