我知道如何从文本文件中读取数据,其中所有信息都由行分隔,但是这个文本文件的格式我正在努力读入和循环。我想要做的是阅读顶线,这是产品的数量,所以我想制作一个数组(而不是ArrayList)与那么多的地方,然后阅读第二行的产品代码,然后阅读第3行价格并重复,直到所有产品都添加到阵列。
这是文件
productData.txt (#分隔值)
10
PA/1234#PV/5732#Au/9271#DT/9489#HY/7195#ZR/7413#bT/4674#LR/4992#Xk/8536#kD/9767#
153#25#172#95#235#159#725#629#112#559#
我正在努力解决这个问题,并希望你们中的一个能告诉我它是如何失败或指向正确的方向。
答案 0 :(得分:2)
注意:我没有文件,或者带有构造函数的类Product,它接受了价格和产品代码,但我相信他会工作。
我必须做类似的事情,我在csv文件(逗号分隔值)中分隔值,所以我使用了类似的东西。
File productData = new File("productData.txt");
Scanner sc = new Scanner(productData);
Integer size = new Integer(sc.nextLine());
Product[] products = new Product[size];
String[] code = new String[size];
int[] price = new int[size];
int countLine = 0;
while (sc.hasNextLine())
{
int count = 0;
String line = new String(sc.nextLine());
for (String retval: line.split("#"))
{
if (countLine == 0) {
code[count] = retval;
} else if (countLine == 1) {
price[count] = Double.parseDouble(retval);
}
count++;
}
}
for (int i = 0; i < size; i++)
{
products[i] = new Product(code[i], price[i]);
}
我在这里做的是先导入文件,然后创建一个新的Scanner。我从第一行的整数中创建了一个名为size的新int。接下来,我制作了3个数组。一个用于最终产品,一个用于产品代码,一个用于价格。我也做了一个整数来计算我在哪一行。现在,我做了一个while循环,一直持续到没有剩下的行。我创建一个名为line的字符串,即文件中的行,然后我将其拆分为#。接下来,我创建了一个遍历每个产品代码/价格的for循环,并将其转换为名为retval(返回值)的字符串。然后我做了一个if语句,如果它在产品代码行上,那么将每个代码设置为数组,代码。否则,如果它在价格线上,则将每个价格设置为数组,价格。最后,我使用for循环将代码数组和价格数组合并到products数组中。
答案 1 :(得分:1)
如果你不想采用正则表达式方式,看起来你可以得到每一行并用数字字符分割它们。这是一个例子:
public class MyTest {
public static final void main (String[] args)
{
String str = "10\n" +
"PA/1234#PV/5732#Au/9271#DT/9489#HY/7195#ZR/7413#bT/4674#LR/4992#Xk/8536#kD/9767#\n" +
"153#25#172#95#235#159#725#629#112#559#";
String[] arr = str.split("\n");
ArrayList<Object[]> al = new ArrayList<>();
String[] product = arr[1].split("#");
String[] price = arr[2].split("#");
for (int i = 0; i < product.length; i++)
{
al.add(new Object[] { product[i], Integer.parseInt(price[2]) });
}
System.out.println(Arrays.deepToString(al.toArray()));
}
}
请记住,我没有进行任何健全性检查或异常捕获/处理,您绝对应该这样做。这只是让你前进的一个简单例子。
答案 2 :(得分:0)
注意:没有执行任何验证。它仅适用于完美的场景,即文件是否与您提到的完全相同的结构
public static void main(String[] args) {
try {
InputStreamReader in = new InputStreamReader(new FileInputStream("D:/productData.txt"));
BufferedReader buffer = new BufferedReader(in);
String readline;
int line_count=0;// no of line in the file
int num_of_prod = 0;
float[] prod_price = null;
String[] prod_code = null;
while((readline=buffer.readLine())!=null){
line_count++;
// read the first line from the file
if(line_count==1){
// read the first line and creating the array
num_of_prod = Integer.parseInt(readline);
prod_code = new String[num_of_prod];
prod_price = new float[num_of_prod];
}
else if(line_count==2){
prod_code = readline.split("#");
}
else if(line_count == 3){
String[] string_price_arr = readline.split("#");
// converts the string array into float array for performing summation
for(int i=0;i<num_of_prod;i++)
prod_price[i]=Integer.parseInt(string_price_arr[i]);
}
}
buffer.close();
System.out.println("Product code");
for(int i=0;i<num_of_prod;i++){
System.out.println(prod_code[i]);
}
// do the same for product price
} catch (IOException e) {e.printStackTrace();}
}