使用scanner类更改文本文件中的特定文本(java)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用scanner类更改文本文件中的特定文本(java)相关的知识,希望对你有一定的参考价值。

我编写的代码可以使用scanner类搜索文本文件中的某些特定文本(例如单词),但我还想在同一个旧文本位置中替换(旧文本到新文本)。我在互联网上发现我必须使用replaceAll方法(replaceAll(old,new);)但它不适用于扫描仪类。

这是我的代码,它只是搜索(如果它存在)在新行中写入新文本而不更改旧文本。

我是否需要将表单(获取数据)表单扫描程序更改为FileReader?

File file = new File("C:\Users....file.txt");
Scanner input = new Scanner(System.in);
System.out.println("Enter the content you want to change:");
String Uinput = input.nextLine();
System.out.println("You want to change it to:");
String Uinput2 = input.nextLine();

Scanner scanner = new Scanner(file).useDelimiter(",");
BufferedWriter writer  = new BufferedWriter(new FileWriter(file, true));
while (scanner.hasNextLine()) {
    String lineFromFile = scanner.next();
    if (lineFromFile.contains(Uinput)) {
        lineFromFile = Uinput2;
        writer.write(lineFromFile); 
        writer.close();
        System.out.println("changed " + Uinput + " tO " + Uinput2);
        break;
    }
    else if (!lineFromFile.contains(Uinput)){
        System.out.println("Don't found " + Uinput);
        break;
    }
}
答案

您无法从文件中读取,然后写入同一文件。您需要2个不同的文件。

  while (read line from input file) { 
      if (NOT matches your search pattern)
            write line to output file.
      else  { // matches
          write start of line to your search pattern.
          write your replace string
          write from end of search pattern to end of line.
      }
   }

除非您的替换字符串与搜索字符串的大小相同,否则您将不得不使用2个文件。考虑一下文件:

 Blah
 Blah
 Blah

现在用“The quick Brown Fox”替换字母'a'。如果替换第一行,则覆盖了文件的其余部分。现在你无法阅读第二行,所以是的,你将不得不使用2个文件。

另一答案

这是基于@Sedrick评论和您的代码的另一个答案。我将它添加到您的伪代码中。

File file = new File("C:\Users....file.txt");
Scanner input = new Scanner(System.in);
System.out.println("Enter the content you want to change:");
String Uinput = input.nextLine();
System.out.println("You want to change it to:");
String Uinput2 = input.nextLine();

Scanner scanner = new Scanner(file).useDelimiter(",");
java.util.List<String> tempStorage = new ArrayList<>();

while (scanner.hasNextLine()) {
    String lineFromFile = scanner.next();
    tempStorage.add(lineFromFile);
}

 // close input file here
// Open your write file here (same file = overwrite).

// now loop through temp storage searching for input string.
for (String currentLine : tempStorage ) {
     if (!lcurrentLine.contains(Uinput)){
        String temp = currentLine.replace(Uinput, Uinput2);
         write a line using temp variable  
     } else { // not replaced
         write a line using currentLine;  
 }
 // close write file here

顺便说一句,你必须用try catch来封装读写,以便为IOExceptions捕获陷阱。这就是我所知道的伪代码。在这个网站上有很多读/写文件的例子。它很容易搜索。

以上是关于使用scanner类更改文本文件中的特定文本(java)的主要内容,如果未能解决你的问题,请参考以下文章

使用用户输入更改文本文件中的特定单词

使用 Java 中的 Scanner 类读取 .txt 文件

java语言中的scanner是啥意思用来干嘛

如何使用jquery更改与特定类匹配的所有文本框的属性

通过 Photoshop 中的脚本更改特定文本的字体

如何使用python更改文本框中的特定字母颜色