gpt4 book ai didi

java - 使用Java中的Scanner解析文本文件或控制台输入并遇到错误

转载 作者:行者123 更新时间:2023-11-30 04:23:25 25 4
gpt4 key购买 nike

我正在尝试从单个项目和回车符之间用空格分隔的文件中读取值。

所以文本文件类似于

1 lunch box 3.99
2 jelly donuts 1.99
4 cases of beer 36.99
2 chess boards 24.99

使用这些值,我尝试构造对象...因此,该对象将由数量、行中的第一个内容、名称(行中的第二个内容)和价格(最后一个内容)组成线。所以构造函数是这样的:

product(int x, String name, float price) { 
this.x = x;
this.name = name;
this.price = price;
}

我的问题是我编码扫描仪的方式在尝试解析所有内容时遇到了麻烦。所以我收到一个 java.util.InputMismatchException。如果我使用如下算法:

if (scannerRef.hasNextInt()) 
arraylistRef.intThing = scannerRef.nextInt();

if (scannerRef.hasNext())
arraylistRef.name = scannerRef.next();

if (scannerRef.hasNextFloat())
arrayListRef.price = scannerRef.nextFloat();

然后代码按照我的方式将每个单独的基元或字符串放入其自己的对象中,而不是循环遍历整行然后将其添加到对象中

我希望这是有道理的。如果您现在正在阅读本文,感谢您的阅读。

我关心的代码的主要部分是:我在这里使用注释掉上述类型的算法的方式将所有内容放入同一个对象中,但遇到了 java.util.InputMismatchException dingo 大脑

// loop while there is text to read
while (s1.hasNextLine()) {
Product p = new Product(p.quantity = s1.next);
//if (s1.hasNextInt())
p.quantity = s1.nextInt();


// else
p.name = s1.next(); // to get strings

// else if(s1.hasNextFloat())
p.price = s1.nextFloat();

// now add the line to the product arraylist
foo.add(p);

}

最佳答案

您希望将文件数据逐行放入字符串(无论您喜欢什么集合类型),然后在找到空白的地方将其拆分并相应地存储数据。要获取整行,您可以使用:

nextLine();

这样你就会得到一个字符串“1 Lunch box 3.99”。然后,您可以在找到空白的地方将其拆分,并将 1 存储为 int,将 lunchbox 存储为字符串,并将 3.99 作为 double (不建议使用 double )。

您可以在这里搜索有用的方法:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html例如 split() 方法。

以下是如何使用 split() 的示例:

假设您的输入行是 1 Lunch box 3.99。您已经将其读入字符串,如下所示:

String example = "1 lunch box 3.99"

要使用 split() 方法在空白处拆分此字符串,您需要执行以下操作:

String[] splitString = example.split(" ");

这将为您提供一个具有以下值的字符串数组:

{"1", "lunch", "box", "3.99"};

然后,您可以使用 Integer.parseIntDouble.parseDouble 等将这些值解析为正确的类型。

关于java - 使用Java中的Scanner解析文本文件或控制台输入并遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16431030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com