【问题标题】:replaceAll( ) not working in replacing lines in a CSV txt filereplaceAll( ) 无法替换 CSV txt 文件中的行
【发布时间】: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


【解决方案1】:

好的,我会在这里回答我自己的问题。

我已经切换了 replaceAll() 的参数。

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多