【问题标题】:number of lines is equal to number of names行数等于名称数
【发布时间】:2015-09-06 08:35:40
【问题描述】:

如果有人可以在 java 程序中帮助我,我有一个名为“input.txt”的文件,其中包含类似

的文本
Agent1 R F 2 0
Agent2 R B 4 5
Agent4 C E 2 2
Agent3 R F 3 11

我想将所有行保存在不同的变量中并对其进行处理。 在这里说我想将第一行保存到我将调用 line1 的字符串中,第二行我将保存在名为 line2 的字符串中第三行我将保存在名为 line3 的字符串中,依此类推。

是他们这样做的任何方式。我的 txt 文件可以有任意数量的行,我想将这些行保存为字符串对它们起作用。

只是我需要一个循环之类的东西,它将不断改变变量的名称。但我不知道该怎么做。

这是我到目前为止的代码,但不是输出,我想将行保存为任何数据类型的字符串

非常感谢任何帮助。

【问题讨论】:

  • 你能展示一下你到目前为止所做的工作/代码吗?
  • “我想将所有行保存在不同的变量中” - 听起来你真的应该使用List,例如ArrayList.
  • @JonSkeet 天哪!!!看看是谁!!
  • 感谢解决方案的人其实我只是一个java初学者,所以不熟悉困难的功能。
  • 我对这段代码的要求是有一个输入表单文件逐行获取文本并根据每行的倒数第二个元素按升序对行进行排序并将其保存到名为的新文件中myout.txt

标签: java file-handling


【解决方案1】:

您不能像您刚才提到的那样通过更改名称来动态创建变量。您可以使用List 存储文件中的数据并稍后处理。

File file = new File("input.txt");
Scanner scanner = new Scanner(file);
List<String> names = new ArrayList<String>();
while (scanner.hasNext()) {
  String line = scanner.nextLine();
  names.add(line);
}
// Now all the lines from the file are stored in the list.
// You can do the processing you need to do.

StringsList转化为String数组,并使用Arrays.sort方法对数组进行排序。我们将提供自定义Comparator 来根据我们的需要对数组进行排序。

String nameArray[] = names.toArray(new String[names.size()]);
Arrays.sort(nameArray, new Comparator<String>() {
  @Override
  public int compare(String o1, String o2) {
    String array1[] = o1.split(" ");
    String array2[] = o2.split(" ");
    return array1[3].compareTo(array2[3]);
  }
});

这里的假设是行将始终包含五个元素,并且我们按行中的第四个位置编号进行排序。


输出:

Agent1 R F 2 0
Agent4 C E 2 2
Agent3 R F 3 11
Agent2 R B 4 5

【讨论】:

  • 兄弟,我已经得到了名称中的全部值,我可以使用 names.get(0) 作为第一行 name.get(1) 作为第二行访问每一行,但我仍然必须保存它某处,我的动机是根据每行的倒数第二个元素重新排列行。
  • 我实际上希望像这样保存在 output.txt 文件中 Agent1 R F 2 0 (NEWLINE 我不知道如何在评论中换行,我按 Enter i 端口评论) Agent4 C E 2 2( NEWLINE) Agent3 R F 3 11(NEWLINE) Agent2 R B 4 5(NEWLINE)
  • 如果您有空闲时间,可以进行实时聊天,谢谢
  • 我已经更新了代码。请再检查一次。前面有个小问题。现已测试和更新。你想知道的。
  • 这个比较是为了定义数组中的重新排序。这是由Arrays.sort 方法在内部调用的。请检查这两个链接你会明白的。 Arrays.sortComparator
【解决方案2】:

试试这个。

public static Map<String, String> loadFile(Reader reader)
        throws IllegalArgumentException{
    Map<String, String> mapList = new TreeMap<String, String>();
    if(reader == null)
    {
        throw new IllegalArgumentException("Reader not valid");
    }
    String line;
    innerReader = new BufferedReader(reader);
    int countLine = 0;
    try
    {
    while((line = innerReader.readLine()) != null)
    {
        if (line == null || line.trim().isEmpty())
            throw new IllegalArgumentException(
                    "Line Empty");
        mapList.put("line"+String.valueOf(countLine), line);
        countLine++;
    }
    } catch (IOException e) {
    }
    return mapList;
}

在 main 添加这个来试试你的代码。

Map<String, String> mapList = new TreeMap<String, String>(Collections.reverseOrder());
    try {
        mapList = loadFile(new FileReader("YourFile.txt"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    for (Map.Entry entry : mapList.entrySet()) {
        System.out.println(entry.getKey() + ", " + entry.getValue());

}

这是输出。

line0, Agent1 射频 2 0

line1, Agent2 R B 4 5

line2, Agent4 C E 2 2

line3, Agent3 R F 3 11

要在文件中打印,请添加:

private static PrintWriter innerWriter;
public static void printMap(Map<String, String> myMap, Writer writer)
            throws IOException {
        if(writer == null)
        {
            throw new IOException("Cannot open file");
        }
        innerWriter = new PrintWriter(writer);
        for (Map.Entry entry : myMap.entrySet()) {
            innerWriter.write(entry.getKey() + ", " + entry.getValue() + "\n");

         //OR THIS FOR ONLY VALUES
         // innerWriter.write(entry.getValue() + "\n");

        }
        innerWriter.close();
    }

这个在主目录

try {
        printMap(mapList, new FileWriter("FileOutput.txt"));
    } catch (IOException e) {
        e.printStackTrace();
    }

【讨论】:

  • 我已经获得了名称中的全部值,我可以使用 names.get(0) 访问每一行作为第一行 name.get(1) 作为第二行,但我仍然必须将它保存在某个地方,我的动机是根据每行的倒数第二个元素重新排列行。我实际上希望这样保存在 output.txt 文件中 Agent1 R F 2 0 (NEWLINE 我不知道如何在评论中给出新行我按 Enter i 端口评论) Agent4 C E 2 2(NEWLINE) Agent3 R F 3 11(NEWLINE ) Agent2 R B 4 5(NEWLINE)
  • 感谢编辑队友,但我认为它会将相同的输入文件放入输出文件,但是否可以根据每行的倒数第二个元素对输出文件行进行排序并输出输出文件中的排序行。
  • 你应该创建想要保存然后排序的对象类,从你上面写的你不是很好理解
猜你喜欢
  • 1970-01-01
  • 2021-11-14
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多