字符串标记符在第一行后停止

时间:2012-02-13 16:47:25

标签: java stringtokenizer

我有一个文本文件,我试图用字符串标记符分解。以下是文本文件的几行:

Mary Smith 1 
James Johnson 2 
Patricia Williams 3 

我正在尝试分解名字,姓氏和客户ID。

到目前为止,我已经能够做到这一点但是在玛丽史密斯之后就停止了。

这是我的代码:

  public static void createCustomerList(BufferedReader infileCust,
            CustomerList customerList) throws IOException
{    


            String  firstName;
            String  lastName;
            int  custId;


            //take first line of strings before breaking them up to first last and cust ID
            String StringToBreak = infileCust.readLine();
            //split up the string with string tokenizer
            StringTokenizer st = new StringTokenizer(StringToBreak);

            firstName = st.nextToken();

            while(st.hasMoreElements())
            {
            lastName =  st.nextToken();
            custId = Integer.parseInt(st.nextToken());
            CustomerElement CustomerObject = new CustomerElement();
            CustomerObject.setCustInfo(firstName,lastName,custId);
            customerList.addToList(CustomerObject);

            }


    }

3 个答案:

答案 0 :(得分:3)

String StringToBreak = infileCust.readLine();

从文件中读取FIRST行。然后你用StringTokenizer提供它。 StringTokenized没有找到更多令牌是正常的。

您必须创建第二个循环,将所有这些循环包含在每个行中。它是:

outer loop: readLine until it gets null {
   create a StringTokenizer that consumes *current* line
   inner loop: nextToken until !hasMoreElements()
}

嗯,确实你不需要做内循环,因为你有三个不同的字段。这足够了:

name = st.nextToken();
lastName = st.nextToken();
id = st.nextToken;

答案 1 :(得分:1)

对于外部循环,您需要将当前行的内容存储在stringToBreak变量中,以便您可以在循环内访问它。 你需要为每一行提供一个新的StringTokenizer,因此它需要在循环中。

String stringToBreak = null;
while ((stringToBreak = infileCust.readLine()) != null) {
     //split up the string with string tokenizer
     StringTokenizer st = new StringTokenizer(stringToBreak);
     firstName = st.nextToken();
     lastName =  st.nextToken();
     custId = Integer.parseInt(st.nextToken());
}

答案 2 :(得分:0)

首先,你要查看你的循环,特别是你如何在循环之外拥有firstName,这样就可以抛弃你所有的标记。您将尝试在没有足够信息的情况下创建新的客户对象。