我对这段代码感到有些困惑。我的文件file name.txt
包含以下数据:
BD1 // user ID
Bob Dillon // user full name
user@email.com // user Email
10.0 // amount of cash
100 // No.of Points
我无法在同一个字符串中读取用户的名字和姓氏。这是我的代码:
Scanner input_File = new Scanner(new File("customer.txt"));
int num_Customers = 0;
while(input_File.hasNext() && num_Customers < maxLoyalty_CardsQty)
{
//read ID
customerID[num_Customers] = input_File.next();
input_File.nextLine();
//Here is my problems begins
while(input_File.hasNextLine())
{
String line = input_File.nextLine();
Scanner line_Scan = new Scanner(line);
line_Scan.useDelimiter(" ");
fName[num_Customers] = input_File.next();
lName[num_Customers] = input_File.next();
line_Scan.close();
}
//read Email
email[num_Customers] = input_File.next();
//read Cash
spendToDate[num_Customers] = input_File.nextDouble();
//read Points
points[num_Customers] = input_File.nextInt();
num_Customers++;
}
input_File.close();
答案 0 :(得分:1)
考虑在文件中使用不同的数据布局。如果您在一行中拥有所有必需的数据,则更容易,例如逗号分隔,特别是如果你有关于多个用户的信息(我想这就是这种情况)
FS1, FirstName, LastName, foo@bar.baz, 10.0, 100
然后你可以选择这样的东西
Scanner scanner = new Scanner(new File("customer.txt"));
while (scanner.hasNext()) {
String[] splitted = scanner.nextLine().split(", ");
// then you've data in a nice array arranged like below
// splitted[0] = user Id
// splitted[1] = first name
// etc.
fName[numCustomers] = splitted[1];
// ...
spendToDate[numCustomers] = splitted[3];
}
或者您可以使用Java 8将其简化为:
new Scanner(new File("customer.txt"))
.forEachRemaining(line -> {
String[] splitted = line.split(", ");
// etc.
});
或者:
Files.lines(Paths.get("customer.txt"))
.forEach(line -> {
String[] splitted = line.split(", ");
// splitted[0] = user Id
// splitted[1] = user name and surname
// etc.
});
另外,一个友好的建议,让自己熟悉Java naming conventions,让你的代码更清晰,更容易阅读。