【问题标题】:I want to use a stringtokenizer to store strings into an object User array but get an error message我想使用 stringtokenizer 将字符串存储到对象用户数组中,但收到错误消息
【发布时间】:2018-10-14 04:55:05
【问题描述】:

我收到一个错误,提示成员线程“主”java.lang.NullPointerException 中出现异常。在 Main.main(Main.java:9) 处初始化 (Members.java:23) 而我正在尝试做的是使用 StringTokenizer 将字符串从文件输入存储到对象数组中。

在main中,第9行只是初始化对象,代码为:Members members = new Members("users.txt");

第 23 行是类成员是:users[nm].setId(st.nextToken());

我不知道错误是什么。

import java.io.*;
import java.util.*;

public class Members {
int nm = 0; //Number of members
User [] users = new User[100]; //Assuming max 
number of user is 100
StringTokenizer st;
Scanner s1;
File f1;
String var1; //this string determines if it a standard or admin user;
String var2;

public Members(String fn) throws FileNotFoundException {
    f1 = new File(fn);
    s1 = new Scanner(f1);

    while(s1.hasNext()) {
        //System.out.println("true");
        st = new StringTokenizer(s1.nextLine(),"/");
        while(st.hasMoreTokens())
        {
            //System.out.print(((String)st.nextToken()));
            users[nm].setId(st.nextToken());
            users[nm].setPw(st.nextToken());
            var1 = st.nextToken();
            users[nm].setFn(st.nextToken());
            users[nm].setLn(st.nextToken());
            users[nm].setEmail(st.nextToken());
            //System.out.print(st.nextToken() + " ");
            if(var1.equals("Admin")) {
                users[nm].setAdmin(true);
                ((Admin)users[nm]).setRank(st.nextToken());
            }
            if(var1.equals("Standard")) {
                users[nm].setStandard(true);
                while(st.hasMoreTokens())
                {
                    ((Standard)users[nm]).addCar(st.nextToken());
                }

            }
        }

        nm++;

        System.out.println();
    }

    s1.close();
    System.out.println("Number of members: " + nm);
}

【问题讨论】:

  • 您只能在调用 st.hasMoreToken() 后调用 st.nextToken() 一次。如果您可以给我一个示例,说明您的一条线的外观,我可以为您提供一个正则表达式解决方案,这将是您解决问题的小菜一碟。
  • 似乎您的用户对象为空。用 User 对象填充数组,然后设置一些东西。
  • dkim/1234/Admin/Carlos/Guerra/admin@carmax.com/dealer app123/6364.dd3K/Standard/Jackson/James/J88@gmail.com/0 hukkz993/3!7A2dss/ Standard/Gonzalez/Mike/MH332@yahoo.com/0 apple12/3W2i.d2/Admin/Kim/Dongchul/dkim@carmax.com/business manager 23fasd/39SD.jd/Standard//Cantu/Roy/kcantu02@hotmail。 com/2/AB234KL34/FF2HHKL94
  • 这就是我的 users.txt 的外观以及我尝试使用标记器的目的
  • 创建一个数组几乎等同于创建(很多)可以容纳某个对象的变量,不会创建该对象的实例,它只是一个占位符。 (就像String var1; 不创建任何字符串,只是一个变量)

标签: java stringtokenizer


【解决方案1】:

您正在创建一个可以容纳Users 的数组,但据我所知,您并没有创建User 的任何实例。当您第一次尝试引用 users[nm] 时,它的值将是 null

你可以这样做:

users[nm] = new User();
users[nm].setId(st.nextToken());

【讨论】:

    【解决方案2】:

    罪魁祸首是User [] users = new User[100]; //Assuming max

    这只是创建一个大小为 100 的数组。不创建任何对象。您正在将 Id 设置为空对象。在设置 Id 之前,您必须初始化您的用户对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 2018-11-13
      • 2021-06-29
      • 2017-08-03
      • 2019-08-05
      • 2018-09-09
      • 2018-01-06
      相关资源
      最近更新 更多