【问题标题】:How to replace specific String in a text file by java?如何用java替换文本文件中的特定字符串?
【发布时间】:2021-02-14 04:28:18
【问题描述】:

我正在用java中的文本文件编写一个程序,我需要做的是修改文件中的特定字符串。 例如,该文件有一行(该文件包含许多行)如“用户名,密码,e,d,b,c,a” 我想将其修改为“用户名,密码,f,e,d,b,c” 我搜索了很多,但一无所获。怎么处理?

【问题讨论】:

  • 你能分享你试过的代码吗??
  • 我想这样做,但我没有想出任何方法来替换文件中的特定字符串 lol。

标签: java string file stringbuffer


【解决方案1】:

一般来说,您可以分 3 步完成:

  1. 读取文件并将其存储在字符串中
  2. 根据需要更改字符串(您的“用户名、密码...”修改)
  3. 将字符串写入文件

您可以在 Stackoverflow 搜索每一步的说明。

这是直接在 Stream 上工作的可能解决方案:

public static void main(String[] args) throws IOException {

    String inputFile = "C:\\Users\\geheim\\Desktop\\lines.txt";
    String outputFile = "C:\\Users\\geheim\\Desktop\\lines_new.txt";

    try (Stream<String> stream = Files.lines(Paths.get(inputFile));
            FileOutputStream fop = new FileOutputStream(new File(outputFile))) {
        stream.map(line -> line += " manipulate line as required\n").forEach(line -> {
            try {
                fop.write(line.getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}

【讨论】:

    【解决方案2】:

    你可以这样尝试: 首先,逐行读取文件并检查每一行是否存在要替换的字符串,替换它,然后将内容写入另一个文件。这样做直到达到 EOF。

    import java.io.*;
    
    public class Files {
    
        void replace(String stringToReplace, String replaceWith) throws IOException {
            BufferedReader in = new BufferedReader(new FileReader("/home/asn/Desktop/All.txt"));
            BufferedWriter out = new BufferedWriter(new FileWriter("/home/asn/Desktop/All-copy.txt"));
    
            String line;
    
            while((line=in.readLine())!=null)  {
                if (line.contains(stringToReplace))
                        line = line.replace(stringToReplace, replaceWith);
                    out.write(line);
                    out.newLine();
            }
            in.close();
            out.close();
        } 
    
        public static void main(String[] args) throws IOException {
            Files f = new Files();
            f.replace("amount", "@@@@");
        }
    }
    

    如果你想使用同一个文件将内容存储在一个缓冲区(字符串数组或列表)中,然后将缓冲区的内容写入同一个文件中。

    【讨论】:

      【解决方案3】:

      如果您的文件与此类似:

      username:username123, 
      password:password123, 
      
      

      将文件加载到字符串后,您可以执行以下操作:

      int startPosition = file.indexOf("username") + 8; //+8 is length of username with colon
      String username;
      for(int i=startPosition; i<file.length(); i++) {
          if(file.charAt(i) != ',') {
              username += Character.toString(file.charAt(i));
          } else {
              break;
          } 
      
          System.out.println(username); //should prong username
      } 
      

      编辑完所有要编辑的内容后,将编辑后的字符串保存到文件中。

      有很多方法可以解决这个问题。阅读 String 文档以了解对 String 的操作。如果没有您的代码,我们将无法为您提供足够的帮助。

      【讨论】:

      • 我的文件不是这样但是非常感谢!
      【解决方案4】:

      算法如下:

      1. 打开一个临时文件以保存编辑后的副本。

      2. 逐行读取输入文件。

      3. 检查当前行是否需要替换
        可以使用String 类的各种方法来做到这一点:

        • equals:将此字符串与指定对象进行比较。当且仅当参数不为 null 并且是表示与此对象相同的字符序列的 String 对象时,结果才为真。
        • equalsIgnoreCase:将此字符串与另一个字符串进行比较,忽略大小写。
        • contains:当且仅当此字符串包含指定的 char 值序列时才返回 true。
        • matches (String regex):判断这个字符串是否匹配给定的正则表达式。
        • startsWith:测试此字符串是否以指定前缀开头(区分大小写)。
        • endsWith:测试此字符串是否以指定前缀开头(区分大小写)。

        还有其他谓词函数:contentEqualsregionMatches

        如果需要的条件是true,提供currentLine的替换:

         if (conditionMet) {
             currentLine = "Your replacement";
         }
      

      或者使用String方法replace/replaceFirst/replaceAll一次性替换内容。

      1. 将当前行写入输出文件。
      2. 确保在从输入文件中读取所有行时关闭输入和输出文件。
      3. 将输入文件替换为输出文件(如果需要,例如,如果没有发生更改,则无需替换)。

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 2011-06-30
        • 1970-01-01
        相关资源
        最近更新 更多