使用逗号作为分隔符在文本文件中构造包含数据的对象时遇到问题
Trouble constructing an object with data in a text file using commas as delimiters
我在通过从 txt 文件读取的构造函数创建 Inventory 对象时遇到问题。
这是文件:
1165,4.25,15
1305,1.80,42
1345,12.56,16
1388,7.42,30
1480,6.54,80
1495,8.36,48
1560,15.27,65
所以我试图将“1165”放入第一个变量,然后将“4.25”放入下一个变量,等等。所以逗号是分隔符。当我 运行 我的程序时,它在第一次通过 main 中的 while 循环后抛出异常,并且变量只是被分配为“1”、“1.0”和“6”,而不是获取全部数字.
import java.util.Scanner;
import java.io.*;
import java.util.regex.*;
public class Proj2 {
public static void main(String[] arg) throws IOException {
Scanner soldScan;
Scanner invScan;
soldScan = new Scanner (new File("SoldSorted.txt"));
invScan = new Scanner (new File("Inventory.txt"));
invScan = invScan.useDelimiter(Pattern.compile(",|\s*"));
int count =0;
while (soldScan.hasNext()){
Sales x = new Sales(soldScan.next());
Inventory y = new Inventory(invScan.nextInt(),invScan.nextDouble(),invScan.nextInt());
x.printSales();
y.printInv();
count++;
}
for (int i=0;i<count;i++){
}
}
}
public class Inventory {
int productCode;
double price;
int quantityOnHand;
public Inventory(int code, double cost, int inStock) {
productCode = code;
price = cost;
quantityOnHand = inStock;
}
public void setCode(int code) {
productCode = code;
}
public void setPrice(double price) {
this.price = price;
}
public void setInStock(int inStock) {
quantityOnHand = inStock;
}
public int getCode() {
return productCode;
}
public double getPrice() {
return price;
}
public int getInStock() {
return quantityOnHand;
}
public int postSale(int sold) {
quantityOnHand = quantityOnHand - sold;
return quantityOnHand;
}
public void printInv(){
System.out.println("Product Code: " + productCode);
System.out.println("Price: " + price);
System.out.println("Quantity on Hand: " + quantityOnHand);
}
}
这是输出:
Product Code: 1165
Quantity Sold: 24
Product Code: 1
Price: 1.0
Quantity on Hand: 6
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at Proj2.main(Proj2.java:18)
您的正则表达式似乎有错误。 * 是 0 个或多个匹配项的通配符,因此“,|\s*
”将匹配空字符串。尝试“,|\s+
”。
我在通过从 txt 文件读取的构造函数创建 Inventory 对象时遇到问题。
这是文件:
1165,4.25,15
1305,1.80,42
1345,12.56,16
1388,7.42,30
1480,6.54,80
1495,8.36,48
1560,15.27,65
所以我试图将“1165”放入第一个变量,然后将“4.25”放入下一个变量,等等。所以逗号是分隔符。当我 运行 我的程序时,它在第一次通过 main 中的 while 循环后抛出异常,并且变量只是被分配为“1”、“1.0”和“6”,而不是获取全部数字.
import java.util.Scanner;
import java.io.*;
import java.util.regex.*;
public class Proj2 {
public static void main(String[] arg) throws IOException {
Scanner soldScan;
Scanner invScan;
soldScan = new Scanner (new File("SoldSorted.txt"));
invScan = new Scanner (new File("Inventory.txt"));
invScan = invScan.useDelimiter(Pattern.compile(",|\s*"));
int count =0;
while (soldScan.hasNext()){
Sales x = new Sales(soldScan.next());
Inventory y = new Inventory(invScan.nextInt(),invScan.nextDouble(),invScan.nextInt());
x.printSales();
y.printInv();
count++;
}
for (int i=0;i<count;i++){
}
}
}
public class Inventory {
int productCode;
double price;
int quantityOnHand;
public Inventory(int code, double cost, int inStock) {
productCode = code;
price = cost;
quantityOnHand = inStock;
}
public void setCode(int code) {
productCode = code;
}
public void setPrice(double price) {
this.price = price;
}
public void setInStock(int inStock) {
quantityOnHand = inStock;
}
public int getCode() {
return productCode;
}
public double getPrice() {
return price;
}
public int getInStock() {
return quantityOnHand;
}
public int postSale(int sold) {
quantityOnHand = quantityOnHand - sold;
return quantityOnHand;
}
public void printInv(){
System.out.println("Product Code: " + productCode);
System.out.println("Price: " + price);
System.out.println("Quantity on Hand: " + quantityOnHand);
}
}
这是输出:
Product Code: 1165
Quantity Sold: 24
Product Code: 1
Price: 1.0
Quantity on Hand: 6
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at Proj2.main(Proj2.java:18)
您的正则表达式似乎有错误。 * 是 0 个或多个匹配项的通配符,因此“,|\s*
”将匹配空字符串。尝试“,|\s+
”。