我正在通过扫描仪访问 .txt 文件中的数据,该 .txt 文件如下所示:
001 City 5000.00 101
002 Capital 4000.00 101
003 Farm 1000.00 102
我需要像这样重新格式化:
Capital
City
Farm
101 9000.00
102 1000.00
我的代码到目前为止:
try{
Scanner scan = new Scanner(new File("C:\\Users\\Dustin\\Desktop\\test.txt"));
String[] strArray = new String[3];
TreeSet<String> ts = new TreeSet<String>();
while(scan.hasNextLine()){
ts.add(scan.nextLine());
//strArray[0] = scan.nextLine();
//StringTokenizer stkn = new StringTokenizer(strArray[0],",");
//System.out.println(stkn.nextElement());
//System.out.println(strArray[0]);
}
for(String s : ts){
System.out.println(s);
}catch(Exception e){
System.out.println("Error: "+e.getMessage());
}
但我不知道如何访问此数据的各个项目并添加到集合中,然后将这 101 个项目添加在一起。我对此很陌生,任何帮助将不胜感激。
最佳答案
您可以尝试执行以下操作:
从文本文件中读取数据并使用 .split(String regex)
对其进行分割方法:
try{
Scanner scan = new Scanner(new File("C:\\Users\\Dustin\\Desktop\\test.txt"));
TreeSet<String> ts = new TreeSet<String>();
while(scan.hasNextLine()){
String[] strArray = scan.nextLine().split("\\s+"); //the will yield an array having {"001", "City", "5000.00", "101"}
由于您想按 ID 分组,因此可以查看 HashMap
并添加这一行:Map<String, Double> map = new HashMap<String, Double>();
TreeSet<String> ts = new TreeSet<String>();
Map<String, Double> map = new HashMap<String, Double>()
当您从文件中读取数据时,您将检查是否已经读取了具有相同 ID 的值:
if(map.containsKey(strArray[3]))
{
map.put(strArray[3], map.get(strArray[3]) + Double.parseDouble(strArray[2].trim()));
}
else
{
map.put(strArray[3], Double.parseDouble(strArray[2].trim());
}
并将数据添加到您的集合中:
ts.add(strArray[1]);
准备好后,您将需要迭代该集合,然后打印其内容。完成后,您将需要迭代 map 并打印键值对。
话虽这么说,由于这两种数据结构都不适合排序,为了清楚起见,我建议您包含放入树集中的值的 ID:
ts.add(strArray[1] + "(" + strArray[4] + ")");
关于java - 访问 Set Java 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190792/