2013-05-25 1 views
1

Я пытаюсь импортировать данные из файла в массив, используя строковый токенизатор.String tokenizer для массива java

Формат данных в файле

AA,BB,CC 
AA,BB,CC 

Но я постоянно получаю ошибку

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.StringTokenizer.nextToken(StringTokenizer.java:349) 
    at java.util.StringTokenizer.nextElement(StringTokenizer.java:407) 
    at main.main(main.java:36) 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.util.StringTokenizer; 


public class main { 
public static void main(String[] args) throws FileNotFoundException { 

    Scanner input; 
    String line; 
    int x=0; 
    String [] cName = new String [100]; 
    String [] cMascot = new String [100]; 
    String [] cAlias = new String [100]; 





     input = new Scanner(new File("test.txt")); 

     while(input.hasNextLine()) { 

      line = input.nextLine(); 
      StringTokenizer strings = new StringTokenizer(line,","); 

      while (strings.hasMoreElements()) { 
       cName[x] = strings.nextElement().toString(); 
       cMascot[x] = strings.nextElement().toString(); 
       cAlias[x] = strings.nextElement().toString(); 
       x++; 
      } 

     } 


} 

} 

Таким образом, любая помощь будет оценена. Я не могу использовать список массивов, так что из контекста

+2

Если все строки имеют этот формат, то почему бы не просто использовать '.split()'? – fge

+1

Не следует ли вам проверять 'hasMoreElements()' перед вызовом каждого 'nextElement()'? – NINCOMPOOP

+0

@fge Я новичок в java, так что мог бы рассказать мне, как я могу это сделать? – djEthen

ответ

0

Я предлагаю вам использовать readLine и split ...

public static void main(String[] args) throws FileNotFoundException { 

    String line; 
    int x=0; 
    String [] cName = new String [100]; 
    String [] cMascot = new String [100]; 
    String [] cAlias = new String [100]; 

    try (BufferedReader input = new BufferedReader(new FileStreamReader("test.txt"))) { 

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

      cName[x] = line.split(",")[0]; 
      cMascot[x] = line.split(",")[1]; 
      cAlias[x] = line.split(",")[2]; 
      x++; 
     } 
    } 

} 
+0

Эй, спасибо, пойдет по этому маршруту – djEthen

+0

Быстрый вопрос: String [] cName = new String [100]; скажем, я не знаю, нужен ли мне размер массива размером 100, что лучший способ сделать его динамичным, поэтому, если у меня есть 105 элементов, я все равно могу сохранить их в массиве – djEthen

+0

@ user2291480, если вам нужен динамический массив, тогда используйте 'ArrayList'. – Pshemo

2

вы не можете назвать .nextElement() много раз в то время как заявление; Befor каждого из них .hasNextLine() должен быть вызван

+0

Yea. Я получил это сейчас .. Спасибо :) – djEthen

+0

Вы имели в виду 'hasMoreElements()'? –

+0

hasMoreElements() – IvanNik

0

Вы можете ниже код полезного тоже:

public static void main(String[] args) throws FileNotFoundException { 

    Scanner input; 
    String line; 

    String cMascot = null; 
    String cAlias = null; 
    String cName = null; 

    input = new Scanner(new File("test.txt")); 
    while (input.hasNextLine()) { 
     line = input.nextLine(); 
     StringTokenizer strings = new StringTokenizer(line, ","); 

     while (strings.hasMoreElements()) { 
      cName = strings.nextToken(); 
      cMascot = strings.nextToken(); 
      cAlias = strings.nextToken(); 
      System.out.println("cName :" + cName); 
      System.out.println("cMascot :" + cMascot); 
      System.out.println("cAlias :" + cAlias); 
     } 
    } 

} 
+0

Эй, это для этого, но струны должны быть массивами. – djEthen