tokenizer和“线程中的异常”主“java.lang.NullPointerException”运行时错误

时间:2011-03-03 08:31:59

标签: java

我正在尝试将字符串标记化并将每个标记分配给java中的数组单元格。这是我的令牌代码,但我遇到了以下运行时错误:

Exception in thread "main" java.lang.NullPointerException

此错误出现在第10行。

任何人都可以通过一个例子帮我解决这个错误?????

#1              Scanner in = new Scanner(System.in);
#2              System.out.print("Enter your name: ");
#3              String name = in.nextLine();
#4              String a[]=null;
#5              int i=0;
#6              StringTokenizer tokenizer=new StringTokenizer(name," ");
#7              while (tokenizer.hasMoreTokens())
#8              {
#9                       String token = tokenizer.nextToken();
#10                      a[i]= token;
#11                       i++;
#12             }

5 个答案:

答案 0 :(得分:2)

String a[]=null;

你正在做

a[i]= token; // a is pointing to null, so a[i] will throw NPE, you need to initiate it

我认为你不知道数组的大小,所以去List

制作

String a[]=null;

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

并替换

a[i]= token;
i++;

a.add(token);

另见

答案 1 :(得分:1)

您的String-Array为null。在使用之前创建String-Array的新实例:

#1              Scanner in = new Scanner(System.in);
#2              System.out.print("Enter your name: ");
#3              String name = in.nextLine();
#4              String a[]; // removed '= null'
#5              int i=0;
#6              StringTokenizer tokenizer=new StringTokenizer(name," ");
#6.1            a[] = new String[tokenizer.countTokens()];
#7              while (tokenizer.hasMoreTokens())
#8              {
#9                       String token = tokenizer.nextToken();
#10                      a[i]= token;
#11                       i++;
#12             }

了解更多信息,请点击此处:http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html#countTokens()

更简单的解决方案是使用数组列表而不是数组。 ArrayList的优点是,您可以向列表中添加值,而不必在开头指定固定大小,意味着大小是可变的。

示例:

Scanner in = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = in.nextLine();
List<String> list = new ArrayList<String>();
StringTokenizer tokenizer=new StringTokenizer(name," ");
while (tokenizer.hasMoreTokens())
{
    String token = tokenizer.nextToken();
    list.add(token)
}

如果您现在想知道,列表中有多少元素使用list.size()

答案 2 :(得分:0)

String a[]=null;
在处理之前已分配

null,因此NullPointerException

String[] a=new String[100];

或者别的什么;

答案 3 :(得分:0)

因为您将null分配给变量a,所以当您稍后尝试使用该变量时,它将导致NullPointerException。您需要为a

指定有意义的内容

以下是您的代码中的问题:

String a[]=null

答案 4 :(得分:0)

您将数组初始化为NULL然后设置其条目...当然您会得到NullPointerException。

您必须使用成员计数初始化数组,例如String [] a = new String [10];