【发布时间】:2021-11-02 04:45:03
【问题描述】:
我正在尝试使用replaceAll() 方法替换文本文件中的某一行,但每次我尝试运行它时,它根本不会改变。我什至试图将字符串 oldUser 转换为正则表达式 (Pattern.quote(oldUser)),我错过了什么吗?
文本文件内容(person.txt):
ABCDEFG1,THERONE ALMADIN,theronealmadin@gmail.com,DAVAO CITY,06/09/1999,09226217885,8000
GFEDCBA2,NATHAN ANG,nathanang@gmail.com,BUTUAN CITY,01/02/2000,09451236987,8000
ADEACAS3,ANTON MARITIREZ,antonmaritirez@gmail.com,GENSAN CITY,02/13/2001,09214561236,8000
AABBCCDD,NAME HERE,emailhere@gmail.com,CITY HERE CITY,12/31/2000,11112223333,8000
特别是我的代码:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) throws IOException {
String oldUser = "AABBCCDD,NEW NAME,emailhere@gmail.com,CITY HERE CITY,12/31/2000,11112223333,8000";
String newUser = "AABBCCDD,NAME HERE,emailhere@gmail.com,CITY HERE CITY,12/31/2000,11112223333,8000";
String filepath = "person.txt";
Scanner scanner = new Scanner (new File(filepath));
StringBuilder bufferedList = new StringBuilder();
while (scanner.hasNextLine()){
bufferedList.append(scanner.nextLine()).append(System.lineSeparator());
}
String personContents = bufferedList.toString();
System.out.println("old data: " + personContents);
scanner.close();
System.out.println("REGEX" + Pattern.quote(oldUser));
personContents = personContents.replaceAll(Pattern.quote(oldUser), newUser);
FileWriter writer = new FileWriter(filepath);
System.out.println("new data: " + personContents);
writer.append(personContents);
writer.flush();
}
}
【问题讨论】:
-
你的代码中有 oldUser 和 newUser 。
-
要么数据没有被替换,在这种情况下文件写入不相关,或者文件写入不起作用,在这种情况下正则表达式替换不相关。您应该能够通过调试代码来确定是哪一个,这将帮助您将问题缩小到一个特定的问题;请参阅minimal reproducible example。
-
@kaya3 在那里!我只是从一个更大的项目中摘录它,我认为它应该按预期运行。
-
正如 tgdavies 在他的评论中所写:您正在尝试用
"AABBCCDD,NAME HERE,emailhere@gmail.com,CITY HERE CITY,12/31/2000,11112223333,8000"替换"AABBCCDD,NEW NAME,emailhere@gmail.com,CITY HERE CITY,12/31/2000,11112223333,8000",但在您的输入中找不到"AABBCCDD,NEW NAME,emailhere@gmail.com,CITY HERE CITY,12/31/2000,11112223333,8000",因此不会被替换。 -
@ThomasKläger 哦等等这是否意味着我已经切换了两个参数?我将它附加到一个类,它实际上找到了用户,并返回给我一个匹配项,这意味着它找到了旧用户。
标签: java replaceall