gpt4 book ai didi

java - 读取两个 .txt 文件以匹配 Java 中的数据

转载 作者:行者123 更新时间:2023-12-01 12:59:35 27 4
gpt4 key购买 nike

我正在做一个学校项目,在类里面我应该阅读两个不同的 .txt 文件。从文件中我应该使用数据来分析它。并很好地打印出一些分析过的信息。具体来说,我有一个 .txt 文件,其中包含用户 ID 号和名字的列表。它看起来像这样:

1,Bobby
2,Joe
3,Sue
4,Mary
5,Victor

从中我有另一个保存数据的 .txt 文件。它看起来像这样:

1,452,2127
2,500,1482
2,462,2490
3,172,2706

第一个数字是链接到其他文件的客户 ID,第二个数字是分钟数,第三个数字是短信数。

 import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class CustomerDriver2 {

public static void main(String[] args) throws FileNotFoundException {

File custFile = new File("Customers.txt");
Scanner custScanner = new Scanner(custFile);

File usageFile = new File("CellPhoneUsage.txt");
Scanner usageScanner = new Scanner(usageFile);

int custID = 0;
int custID2 = 0;
String name = "";

Customer myCustomer = new Customer(0, "");

while(custScanner.hasNextLine())
{
String myLine = custScanner.nextLine();

Scanner myLineScan = new Scanner(myLine);
myLineScan.useDelimiter(",");

while(myLineScan.hasNext())
{
custID = myLineScan.nextInt();
name = myLineScan.nextLine();

myCustomer = new Customer(custID, name);

while(usageScanner.hasNextLine())
{

String myLine2 = usageScanner.nextLine();
Scanner myLineScan2 = new Scanner(myLine2);
myLineScan2.useDelimiter(",");

while (myLineScan2.hasNext())
{
custID2 = myLineScan2.nextInt();
int calls = myLineScan2.nextInt();
int txt = myLineScan2.nextInt();

if(custID == custID2)
{
myCustomer.setMinTotal(calls);
myCustomer.setTxtTotal(txt);
}

}

}
System.out.println(myCustomer.toString());
}

}

}//end of main

}//类(class)结束

使用我目前拥有的内容,我得到如下输出:

Name: ,Bobby
Min Sum: 3509
Text Sum: 21370
Min Average: 350
Txt Average: 2137

Name: ,Joe
Min Sum: 0
Text Sum: 0
Min Average: 0
Txt Average: 0

Name: ,Sue
Min Sum: 0
Text Sum: 0
Min Average: 0
Txt Average: 0

Name: ,Mary
Min Sum: 0
Text Sum: 0
Min Average: 0
Txt Average: 0

Name: ,Victor
Min Sum: 0
Text Sum: 0
Min Average: 0
Txt Average: 0

名称正确,但数据获取不正确。我很困惑我哪里出错了。

我需要的是其他 4 个名称也具有第一个名称所具有的数据类型。

我还有另一个名为 Customer 的类来执行计算:

 public class Customer {

int custID;
String name;

int totalMin;
int totalTxt;

//constructor
public Customer(int custID, String name)
{
this.custID = custID;
this.name = name;
}

public Customer(int custID, int totalMin, int totalTxt)
{
this.custID = custID;
this.totalMin = totalMin;
this.totalTxt = totalTxt;
}

public void setMinTotal(int min)
{
this.totalMin = totalMin + min;
}
public void setTxtTotal(int txt)
{
this.totalTxt = totalTxt + txt;
}

public int getAvgMin()
{
return totalMin/10;
}
public int getAvgTxt()
{
return totalTxt/10;
}

public String toString()
{
return "Name: " + name + "\n"
+ "Min Sum: " + totalMin +"\n"
+ "Text Sum: "+ totalTxt + "\n"
+ "Min Average: " + getAvgMin() + "\n"
+ "Txt Average: " + getAvgTxt()+ "\n";
}
}

最佳答案

我认为你的问题是

 while(usageScanner.hasNextLine())
{

String myLine2 = usageScanner.nextLine();
.....

在完全迭代该行之后(这发生在第一个客户身上),这将始终返回 false。

你必须重写一些代码才能解决这个问题。

你可以1. 在每个循环上实例化一个新的扫描仪(资源非常昂贵) 2. 单独解析该文件并将客户 ID 和数据存储在单独对象的列表中,而不是在迭代客户时从该列表中提取数据

编辑

这是我的解决方案1(实现速度快,但资源昂贵)。您必须实例化每次在第一个循环内扫描的新用法

改变

File usageFile = new File("CellPhoneUsage.txt");
//Scanner usageScanner = new Scanner(usageFile);
...
while(custScanner.hasNextLine())
{
Scanner usageScanner = new Scanner(usageFile);

关于java - 读取两个 .txt 文件以匹配 Java 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621743/

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