繁体   English   中英

如何在包含特定字符串的文本文件中查找行并用新字符串替换每一行?

[英]How to find lines in a text file containing specific strings and replace each whole line with a new string,?

刚从 Android 上的 Java 开始。找到很多示例代码来搜索字符串并替换它们或删除它们出现的行。

但是没有什么可以用新字符串替换字符串所在的整行。

如果有示例,我将不胜感激指向它的指针或一些我可以修改的示例代码。

该文件永远不会超过 50 行。

总是会搜索两个字符串,并且每个字符串出现的行总是会被一个全新的字符串替换。

每个字符串在文件中只会出现一次(尽管可能有一些类似的)。

行号未知(该行的 rest 的文本也是如此)。

新行必须以与原始行完全相同的行号插入到文本文件中。

文本文件命名示例:xyz-colors.txt

搜索字符串一:yellow-XXc

新字符串替换字符串 1 所在的完整行:John - black-XXe - new pin 13762

搜索字符串二:green-BBa

新字符串替换出现字符串二的完整行:Mike - red-XXd - new pin 14862

谢谢你的指点。

编辑:

我几乎要放弃了。 这么多例子,但都发现字符串多次出现,这将浪费资源和时间,因为我确定只有一次出现。 我只会要求他们重组他们的文件,所以我现在需要替换的行号然后是 go。

Edit2:文件无法重组,所以我必须找到 Paths.get 的替代方法

Edit3:我刚刚解决了这个问题。 使用 Scanner 获取行号,使用 BufferedReader 和 FileReader/readline 获取该行号的完整字符串。 现在我只需要使用 FileWriter 将整行中的字符串替换为另一个包含更改的字符串。 完成后我会发布完整的代码。

让我们这样处理:

  • 您有一个文件要读取 --> 先弄清楚如何加载它

  • 您必须更新文件 --> 了解如何更新文件。

  • 阅读所有行(因为最多 50 行,所以不应该关心这里的优化)

  • 遍历每一行,检查它是否包含您正在搜索的字符串,将 Line 替换为新的 Line。

  • 循环结束? 使用更新的行列表更新您的文件。

考虑使用 File.readAllLines() from Java >= 8

一些对您有用的文档: https://javarevisited.blogspot.com/2015/07/3-ways-to-read-file-line-by-line-in.html#axzz6dg6HEon1

只是一个没有异常处理的简单示例作为起点:

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class Test {
    public static void main(String[] args) throws IOException {
        //path to your file
        String filename ="C:\\Temp\\xyz-colors.txt";
        //read content of file to list
        List<String> list = Files.readAllLines(Paths.get(filename));

        String searchOne = "yellow-XXc";
        String replacementOne = "John - black-XXe - new pin 13762";

        String searchTwo = "green-BBa";
        String replacementTwo = "Mike - red-XXd - new pin 14862";

        list.replaceAll(s -> s.contains(searchOne) ? replacementOne : s);
        list.replaceAll(s -> s.contains(searchTwo) ? replacementTwo : s);

        //write modified list to file
        Files.write(Paths.get(filename), list, Charset.forName("UTF-8"));
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM