我有一个文本文件,我试图用字符串标记符分解。以下是文本文件的几行:
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);
}
}
答案 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,这样就可以抛弃你所有的标记。您将尝试在没有足够信息的情况下创建新的客户对象。