gpt4 book ai didi

java - 使用java从txt文件中检索数据并将数据替换到新的txt文件中

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:53 24 4
gpt4 key购买 nike

我正在尝试读入一个文本文件,然后进行一些操作并将记录更新到一个新的文本文件中。

这是我到目前为止所拥有的:

ArrayList<String> linesList = new ArrayList<>();

BufferedReader br;

String empid, email;

String[] data;

try {
String line;
br = new BufferedReader(new FileReader("file.txt"));
while ((line = br.readLine()) !=null) {
linesList.add(line);
}
br.close();
}
catch (IOException e) { e.printStackTrace(); }

for (int i = 0; i < linesList.size(); i++) {
data = linesList.get(i).split(",");
empid = data[0];
ccode = data[3];
}
File tempFile = new File("File2.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));
for (int i = 0; i < linesList.size(); i++) {
if(i==0){
bw.write(linesList.get(i));
bw.newLine();
}
else{
data = linesList.get(i).split(",");

String empid1 = data[0];
if(data[13].equals("IND")) {
String replace = data[3].replaceAll("IND", "IN");
ccode1 = replace;
System.out.println(ccode1);
}
else if(data[13].equals("USA")) {
String replace = data[3].replaceAll("USA", "US");
ccode1 = replace;
}
else {
ccode1 = replace; //This does not work as replace is not defined here, but how can I get it to work here.
}
String newData=empid1+","+ccode1;
bw.write(newData);
bw.newLine();
}
}

以下是文本文件中的内容:

EID,First,Last,Country
1,John,Smith,USA
2,Jane,Smith,IND
3,John,Adams,USA

因此,我需要帮助的是编辑三个字母的国家/地区代码并将其替换为两个字母的国家/地区代码。例如:USA 将成为 US,IND 将成为 IN。我可以读取国家/地区代码,但在更改值并将更改后的值替换回不同的文本文件时遇到问题。任何帮助表示赞赏。提前致谢。

最佳答案

在文本编辑器中打开文件,搜索并替换,,USA 替换为 ,US,IND 替换为 ,IN 等等。

因此,要使其自动化,请在同一 while 循环中读取一行:

//while(read){ line.replaceAll(",USA",",US");

这将是完成您的目标的最简单方法。

要保存,请打开 BufferedWriter bw;,就像打开阅读器并使用 bw.write() 一样。您可能更愿意同时打开源文件的读取器和带有 _out 后缀的新文件的写入器。这样你就不需要将文件数据保存在内存中,你可以在循环时读写。

对于更困难的方法,请阅读 csv 规范:https://www.rfc-editor.org/rfc/rfc4180#section-2

请注意,您必须考虑将字段括在引号中的可能性,例如:"1","John","Smith","USA",这意味着您还必须将 ,\"USA 替换为 ,\"US

分隔符可能是也可能不是逗号,您必须确保您的输入始终使用相同的分隔符,或者您可以在运行时检测和切换。

您必须考虑分隔符可能是字段的一部分或引号是字段的一部分的情况。

现在您知道/可以解决这些问题,您可以不使用替换,而是使用 while( (/*int*/c = br.read()) != -1) 逐个字符地解析行,并使用 if 门手动执行此替换。

/*while(read)*/
if( c == delimiter ){
if not field, start next field, else add to field value

} else if( c == quote ){
if field value empty, ignore and expect closing quote, else if quote escape not marked, mark it, else, add quote to field value
}
(...)
} else if( c == 13 or c == 10 ){
finished line, check last field of row read and replace data
}

为了使其更好/更难,定义一个解析状态机,将状态放入枚举中,并在心中编写 if 门(这将使您的代码更像编译器解析器)。

您可以在这里找到不同阶段的解析代码:https://www.mkyong.com/java/how-to-read-and-parse-csv-file-in-java/

关于java - 使用java从txt文件中检索数据并将数据替换到新的txt文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52107786/

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