用java在一个txt文件中按列顺序排列N个数字行



我正试图完成老师的作业,我必须用Java在文本文件中按列排列一组数字行免责声明:我的老师不希望扫描仪类用于此作业:样本数据如下:

17,10,
6, 90,
11

结果应该是:

17
10
6
90
11

我的代码是:

package esercizio.prova.verifica;
import java.io.*;
public class EsercizioProvaVerifica {
public static void main(String[] args) {

//read the file and put content in a String array
String[] str={};
String line = "";
try{
BufferedReader reader = new BufferedReader(new FileReader("C:\sorgente\file.txt"));
int i=0;

while((line=reader.readLine())!=null || i<str.length){
line = reader.readLine();
System.out.println(line + i);
str[i]=line;
i++;
}

reader.close();
} catch(IOException e){}


// Write array on file
for (int i=0;i<str.length;i++){
System.out.println(str[i]);
}
try{
BufferedWriter bw = new BufferedWriter(new FileWriter("C:\sorgente\file.txt"));
for (int i = 0; i < str.length; i++) {
bw.write(str[i] + "n"+ "");
}
bw.close();
}catch (IOException e1){}}}

问题是每次我运行程序时,文件中的文本都会消失,Java会返回以下输出:

run:
6, 90,0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at esercizio.prova.verifica.EsercizioProvaVerifica.main(EsercizioProvaVerifica.java:16)
C:UsersfrancAppDataLocalNetBeansCache8.2rcexecutor-snippetsrun.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

我找了几个小时都找不到问题,有人能帮忙吗?非常感谢。

您有几个问题。

  • 您尝试在没有分配的情况下写入数组
  • 您可以在while指令和while块中进行读取。这会导致您跳过值
  • 您没有在其分隔符(,(上拆分值
  • 你忽略了例外情况

这里有一种方法。有很多。这使用单个循环来同时执行读取和写入操作。

  • 打开源文件并创建一个临时输出文件
  • 当你读到这行的时候
  • 对剩余的CCD_ 2进行分割并写出值
  • 完成后,关闭每个文件,然后删除原始文件,然后重命名为原始文件
try {
File input = new File("C:\sorgente\file.txt");
File output = File.createTempFile("temp",".txt");
BufferedReader reader = new BufferedReader(new FileReader(input));
BufferedWriter writer = new BufferedWriter(new FileWriter(output));

String line = "";
while ((line = reader.readLine()) != null) {
for(String s : line.split(",")) {
writer.append(s.trim());
writer.newLine();
}
}
reader.close();
writer.close();
input.delete();
output.renameTo(input);
} catch (Exception e) {
e.printStackTrace();
}

初始化一个长度为零的空数组。数组长度必须事先确定,并且在运行时不能更改。但是,由于您不知道文件可以有多少行,数组不是正确的数据结构。请改用列表。

使用try with resource。因此,您不必手动关闭您的阅读器和写入程序。

在回信时,不要拆分单个数字。用逗号分隔每一行。

请使用系统行分隔符而不是\n,这样您的代码在所有操作系统上的行为都相同。

不要忽略异常,即不要执行catch(IOException e){}

示例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] args) {
List<String> lines = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader("C:\sorgente\file.txt"))){
// read line by line and add to list
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
}
try(BufferedWriter bw = new BufferedWriter(new FileWriter("C:\sorgente\file.txt"))){
for(int i = 0; i < lines.size(); i++){
//splite each line at the commas
String[] parts = lines.get(i).split(",");
for(int k = 0; k < parts.length; k++){
//remove unnecessary spaces befor ore after comma using trim method
bw.write(parts[k].trim());
bw.write(System.lineSeparator());
}
}
}
catch (IOException e) {
System.err.format("IOException: %s%n", e);
}
}
}

最新更新