gpt4 book ai didi

java - 问题从文件读取并使用二维数组对数据进行排序

转载 作者:行者123 更新时间:2023-12-01 15:25:58 25 4
gpt4 key购买 nike

我正在制作一个省份分类器,要求是我必须保持主类不变,并制作一个名为 Munge 的私有(private)类,我已经在这花了几个小时并更改了我的代码数百次,基本上它从如下所示的文本文件中读取

Hamilton, Ontario
Toronto, Ontario
Edmonton, Alberta
Red Deer, Alberta
St John's, Newfoundland

并且需要这样输出

Alberta; Edmonton, Red Deer
Ontario; Hamilton, Toronto
Newfoundland; St John's

我的主类是不可更改的,看起来像这样

public class Lab5 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

if(args.length < 2) {
System.err.println("Usage: java -jar lab5.jar infile outfile");
System.exit(99);
}

Munge dataSorter = new Munge(args[0], args[1]);

dataSorter.openFiles();
dataSorter.readRecords();
dataSorter.writeRecords();
dataSorter.closeFiles();
}
}

我制作的 Munge 类看起来像这样

package lab5;

import java.io.File;
import java.util.Scanner;
import java.util.Formatter;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;

public class Munge
{

private String inFileName, outFileName;
private Scanner inFile;
private Formatter outFile;
private int line = 0;

private String[] data;

public Munge(String inFileName, String outFileName)
{
this.inFileName = inFileName;
this.outFileName = outFileName;

data = new String[100];
}

public void openFiles()
{
try
{
inFile = new Scanner(new File(inFileName));
File file = new File("input.txt");
SortedMap<String, List<String>> map = new TreeMap<String, List<String>>();
Scanner scanner = new Scanner(file).useDelimiter("\\n");
while (scanner.hasNext()) {
String newline = scanner.next();
if (newline.contains(",")) {
String[] parts = newline.split(",");
String city = parts[0].trim();
String province = parts[1].trim();
List<String> cities = map.get(province);
if (cities == null) {
cities = new ArrayList<String>();
map.put(province, cities);
}
if (!cities.contains(city)) {
cities.add(city);
}
}
}
for (String province : map.keySet()) {
StringBuilder sb = new StringBuilder();
sb.append(province).append(": ");
List<String> cities = map.get(province);
for (String city : cities) {
sb.append(city).append(", ");
}
sb.delete(sb.length() - 2, sb.length());
String output = sb.toString();
System.out.println(output);
}
}
catch(FileNotFoundException exception)
{
System.err.println("File not found.");
System.exit(1);
}
catch(SecurityException exception)
{
System.err.println("You do not have access to this file.");
System.exit(1);
}

try
{
outFile = new Formatter(outFileName);
}
catch(FileNotFoundException exception)
{
System.err.println("File not found.");
System.exit(1);
}
catch(SecurityException exception)
{
System.err.println("You do not have access to this file.");
System.exit(1);
}
}

public void readRecords()
{
while(inFile.hasNext())
{
data[line] = inFile.nextLine();
System.out.println(data[line]);
line++;
}
}

public void writeRecords()
{
for(int i = 0; i < line; i++)
{
String tokens[] = data[i].split(", ");
Arrays.sort(tokens);

for(int j = 0; j < tokens.length; j++)
outFile.format("%s\r\n", tokens[j]);
}
}

public void closeFiles()
{
if(inFile != null)
inFile.close();

if(outFile != null)
outFile.close();
}
}

请原谅我的括号,在 netbeans 中格式正确,但我必须将底部的括号移到代码块中

最佳答案

因为我认为这是家庭作业,所以我将避免给您提供解决方案,但会给出一些该怎么做的提示。

当您读完一行时,它由城市、省份组成。因此,您需要做的第一件事是将字符串分成两部分。第二部分是省,第一部分是市。您需要为每个省创建一个集合,并将城市存储在正确的省集合中。

一旦获得,您可以对找到的省份的名称进行排序,并迭代它们。对省份的城市进行排序,然后输出省份名称和每个城市名称。

有用的类可能是 HashMap、TreeMap、List、Collections(具有排序方法)。

希望这有助于您走得更远,否则请尝试更具体地说明您遇到的困难。

关于java - 问题从文件读取并使用二维数组对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10145641/

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