gpt4 book ai didi

java - 读取、扫描、修改文本文件并将修改后的文本放入新文件中

转载 作者:行者123 更新时间:2023-12-02 05:47:25 26 4
gpt4 key购买 nike

我尝试读取文本文件并尝试修改它。我从 StackOverflow 得到了很多讨论,以下是内容:

NO 1025 0

NO 1025 1

OP 1026 0

EndRow

我想要的修改后的文本文件:

NO 0

AND 1

OP 0

EndRow

我阅读了一些有关它的讨论主题,然后得出的结论是我必须使用 .hasNextLine 方法来检查每一行。代码如下:

import java.io.*;
import java.util.Scanner;

public class MainConvert {

/**
* @nahdiya
*/
public static void main(String[] args) {
try {
File readNet = new File("testttt.net");
FileReader readFileNet = new FileReader(readNet);
BufferedReader reader = new BufferedReader(readFileNet);
Scanner scan = new Scanner("testttt.net");
PrintWriter fileConvert = new PrintWriter("convertNet.txt");
while (scan.hasNextLine()) {
String check = scan.next();
String checkLine = scan.nextLine();
if (checkLine.contains("NO 1025")) {
if(checkLine.contains("NO 1025")) {
fileConvert.println("AND "+check );
} else if (checkLine.contains("OP 1026")) {
fileConvert.println("OP"+check);
} else {
fileConvert.println(checkLine);}
}
}
}
reader.close();
fileConvert.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}

当我尝试运行该类时,输出消息如下所示:

java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at fileConvertSave.MainConvert.main(MainConvert.java:21)

问题是:

PrintWriter fileConvert = new PrintWriter("convertNet.txt");

这条线有什么问题吗?我只想修改 testttt.net 文件。 fileConvert 必须创建为新文件。这是什么问题?

最佳答案

已编辑:请参阅底部的完整解决方案:

产生错误消息的原始问题是扫描程序尝试在不存在的行上执行 nextLine(),原因是:

String check = scan.next(); 
String checkLine = scan.nextLine();

当你打电话时:

while( scan.hasNextLine() ) 

还有下一行可用。然后你调用:

scan.next();

此时可能不再有“下一行”可用。然后你调用:

scan.nextLine() 

然后繁荣起来。

删除线

String check = scan.next();

应该可以工作。

编辑:

这是问题所有其他部分的解决方案...它基本上是对您所拥有的内容的完全重写,因此请阅读所有代码,了解它的作用并尝试了解这一切!如果有疑问,请在提问之前先阅读文档。

BufferedReader reader = null;
PrintWriter writer = null;

try {
reader = new BufferedReader(new FileReader("testttt.txt"));
writer = new PrintWriter("convertNet.txt");

// setup the pattern that we want to find and replace in the input:
// NB> this is a regex (or regular expression)
// it means, find [space] then either 1025 or 1026 then [space]
String patternToMatch = " (1025|1026) ";

String inputLine = null;

// while there are lines to read, read them one at a time:
while ((inputLine = reader.readLine()) != null) {

// create the outputLine which is the input line with our pattern
// " 1025 " or " 1026 " replaced by just a single space:
String outputLine = inputLine.replaceFirst(patternToMatch, " ");

// log the transformation for debugging purposes:
System.out.println(inputLine + " -> " + outputLine);

// write the outputLine to the output file:
writer.println(outputLine);
}
}
catch (FileNotFoundException ex) {
System.out.println("file was not found: " + ex);
}
catch (IOException ex ) {
System.out.println("io error: " + ex);
}
finally {
try {
if( reader != null ) reader.close();
if ( writer != null ) writer.close();
} catch (IOException ex) {
System.out.println("error closing file " + ex);
}
}

请注意,即使出现异常,finally block 也能很好地进行清理。还有一种更新的方法可以做到这一点,可以使代码更短一些,称为 try with resources:

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

关于java - 读取、扫描、修改文本文件并将修改后的文本放入新文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23923414/

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