【问题标题】:Java StringTokenizer Error when outputting to console输出到控制台时出现 Java StringTokenizer 错误
【发布时间】:2016-10-30 20:51:14
【问题描述】:

我正在尝试使用 StringTokenizer 类从文本文件中拆分字符串,但是当我运行应用程序时,编译器会在 Netbeans 控制台中打印我要拆分的单词,但也会显示一个例外。

这是我的代码:

package Calqfunny; 

import java.io.BufferedReader; 
import java.io.FileReader;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;

public class Files {

public String direccion;

public Files(){

    direccion = " ";
}

public Files(String direccion){

    this.direccion = direccion;
}




public String leerTxt(String direccion){

    String auxiliar = " ";

    try{

        BufferedReader br = new BufferedReader(new FileReader(direccion));
        String temp = " "; //Aqui guardamos el texto del archivo temporalmente
        String banana; //aqui almacenamos 


        while((banana = br.readLine())!=null){
            //se realiza el ciclo mientras que el archivo tenga datos.

           temp = temp + banana; 

        }
        auxiliar = temp;

    }catch(Exception e){

    JOptionPane.showMessageDialog(null,"\"¿Cómo vas a pedir un archivo que no existe? :v\"");

    }

    String nombre = null, apellido = null, edad = null, bday = null;
   StringTokenizer tokens = new StringTokenizer (auxiliar, ";");

    System.out.println("Nombre\tApellido Edad\tFecha de Nac.");
    while(tokens.hasMoreTokens()){


          nombre = tokens.nextToken();
          apellido = tokens.nextToken();
          edad = tokens.nextToken();
          bday = tokens.nextToken();


          System.out.println(nombre+"\t"+apellido+"\t"+edad+"\t"+bday);

    }

        return auxiliar;
  } 
}

这是我的应用程序的输出

Nombre  Apellido  Edad  Fecha de Nac.
David    Villa     31        1985
Andrea   Pirlo     36        1980
Lionel   Messi     29        1987
Tomas    Rincon    27        1989

这是编译器抛出的异常

Exception in thread "main" java.util.NoSuchElementException

at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)

at Calqfunny.Files.leerTxt(Files.java:69)

at Calqfunny.Mein.main(Mein.java:14)

C:\Documents and Settings\Goyo\Configuración local\Datos de    
programa\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned:1

BUILD FAILED (total time: 0 seconds)

我能做些什么来解决它?

【问题讨论】:

  • 你能提供你的方向文件内容吗?
  • 就像 javaguy 说的,文件内容是解决问题的关键。此外,该错误可能是由您的 while 循环 while(tokens.hasMoreTokens()) 引起的 - 通常 hasMoreTokens() 仅对另外 1 个令牌有效,并且您一次消耗 4 个。
  • @javaguy 你能更具体一点吗?我不明白。

标签: java exception stringtokenizer


【解决方案1】:

您的 while 循环正在测试 StringTokenizer 是否还有一个令牌。但是,您正在阅读另外四个令牌。当令牌的数量不能被四整除时,这将崩溃。

您可以安全地做的是:

StringTokenizer tokens = new StringTokenizer(auxiliar, ";");

while(tokens.hasMoreTokens()){
    token = tokens.nextToken();
    System.out.println(token);
}

【讨论】:

  • 那么,我该怎么办?如何检查我循环中的令牌?
  • 您需要首先检查下一个令牌的存在(您在 while 条件下正确地做到了这一点),然后在 while 循环中准确读取一个令牌。
  • 好的,在这种情况下我应该为每个令牌做一个循环?
  • 酷,伙计!我现在知道了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 2015-04-16
相关资源
最近更新 更多