gpt4 book ai didi

java - 如何在java应用程序中从文本文件中解析int或double值

转载 作者:行者123 更新时间:2023-12-01 09:19:53 26 4
gpt4 key购买 nike

我想将特定值从文本文件复制到Java应用程序中的Arraylist。这是我的文本文件(作为 test.text 存储在我的桌面中)

String name = carrot;
double unit_price = 200;
int unit = 10;

我想将这个值存储在 Arraylist 中,它出现在我的主应用程序中,如下所示:

package com.main;
import com.collection.Ingridient;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class FileReaderApp {


public static void main(String[] args) throws FileNotFoundException, IOException {
Ingridient i_one = new Ingridient();
ArrayList<Ingridient> db = new ArrayList<Ingridient>();
FileReader fin = new FileReader("/home/yati/Desktop/test");
Scanner src = new Scanner(fin);
// Read the ingridient from text file.
while (src.hasNext()) {
if (src.hasNext()) {
i_one.setName(src.next());
System.out.println("Name: " +src.next());
} else
if(src.hasNextDouble()) {
i_one.setUnit_price(src.nextDouble());
System.out.println("Unit Price: " +src.nextDouble());
}
else if (src.hasNextInt()) {
i_one.setUnit(src.nextInt());
System.out.println("Unit: " +src.nextInt());
} else {
System.out.println("File format error.");
return;
}
db.add(i_one);
}
fin.close();

}

}

她的 Ingridient 类具有以下代码:

package com.collection;
public class Ingridient {
String name;
Double unit_price;
int unit;

public Ingridient() {
name = null;
unit_price = null;
unit = 0;
}

public void setName(String name) {
this.name = name;
}

public void setUnit_price(Double unit_price) {
this.unit_price = unit_price;
}

public void setUnit(int unit) {
this.unit = unit;
}

}

我的问题是我的应用程序只能在 Ingridient 对象中存储名称,而不能在unit 和unit_price 中存储任何值。获得的输出是: enter image description here我知道我在某个地方犯了错误,但我无法解决这个问题。有什么建议吗?

最佳答案

这应该可以做到:

public static void main(String[] args) throws IOException {
String content = "String name = carrot;\ndouble unit_price = 200;\nint unit = 10;";
try (Scanner sc = new Scanner(content)) {
sc.useDelimiter("(;*\n*.+ .+ = )|;");
List<Incredient> incredients = new ArrayList<>();
while (true) {
Incrediend incredient = new Incredient();
if (sc.hasNext()) {
String name = sc.next();
incredient.setName(name);
System.out.println("Name: " + name);
} else {
break;
}
if (sc.hasNextDouble()) {
double unitPrice = sc.nextDouble();
incredient.setUnit_price(unitPrice);
System.out.println("Unit Price: " + unitPrice);
} else {
break;
}
if (sc.hasNextInt()) {
int unit = sc.nextInt();
incredient.setUnit(unit);
System.out.println("Unit: " + unit);
} else {
break;
}
incredients.add(incredient);
}
} catch (Exception e) {
e.printStackTrace();
}
}

这是因为我使用了分隔符(;*\n*.+ .+ = )|;。这段正则表达式只是删除了文本文件中您不感兴趣保存的所有部分。

您的方法存在一些问题,例如:

i_one.setName(src.next());
System.out.println("Name: " +src.next());

在这里,您从扫描器读取 2 个 token ,因为有 2 次调用 next(),如果您想对多个事物使用相同的 token ,您应该创建一个新变量来存储它位于(例如:String name = sc.next())。

扫描仪使用的默认分隔符是单个空格,因此,在您的代码中,hasNextDouble()hasNextInt() 永远不会为 true,文本文件中的所有数字都以 ; 结尾。

我不确定你在这里想做什么,从文本文件中解析java代码有点不寻常。如果您可以更改文本文件的格式,您应该选择一种更容易解析的格式(例如 CSV)。

关于java - 如何在java应用程序中从文本文件中解析int或double值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236123/

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