【问题标题】:How do I read a file, and replace certain parts of it with content from a different file?如何读取文件,并将其中的某些部分替换为不同文件中的内容?
【发布时间】:2021-05-08 02:13:41
【问题描述】:

作为学生项目的一部分,我正在用 Java 制作一个形容词填空故事创作者。我有两个 .txt 文件:一个文件有故事本身,空格写成这样:__。 IE:“这是一个__故事。” 第二个文件包含一个形容词列表。

我的大部分代码都可以工作了,但是我无法从故事文件中读取内容,并且无法用形容词文件中的随机单词替换 __ 部分。最好的方法是什么?

如果您有任何问题,请告诉我,谢谢!

【问题讨论】:

  • 做更多的研究。自己试试。如果您遇到困难,请指定问题并发布。还要检查How to ask
  • 这能回答你的问题吗? Replace text in files 您应该阅读 String 类中的 replace() 和 replaceAll() 方法。

标签: java replace java.util.scanner


【解决方案1】:

在 Java 中读取文件的一些好资源是这个网站:https://www.geeksforgeeks.org/different-ways-reading-text-file-java/ 有很多可用的选项,您可以在那里轻松找到最适合您项目的选项。

要替换文本文件中的空格,最好尝试以下方法:

//Creating a temporary copy of the file is useful in that case
FileWriter writer = new FileWriter(tempFile);

Reader reader = new FileReader(yourFile);
BufferedReader br = new BufferedReader(reader);

while(br.ready()) {
    writer.write(br.readLine().replaceAll("__", adjective));
}

writer.close();
br.close();
reader.close();

//And finally overwrite the initial file with the result
tempFile.renameTo(file);

我从之前回答的这个问题中得到了答案:Files java replacing characters 并根据您的情况进行了调整。

【讨论】:

  • 感谢您的回复,一定会尝试使用 FileReader 而不是 Scanner,并阅读 BufferedReader 的工作原理!
【解决方案2】:

我一开始就没有发布我的代码,这就是我现在所做的。我猜我开始在我的代码中使用 for 循环的地方是它不起作用的地方。而且我不确定我是否以正确的方式使用 .equals。

我当然会做更多的研究,但我将不胜感激任何关于我下面代码的指针!

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class StoryMaker {


    public void createStory() throws FileNotFoundException {

        ArrayList<String> storyArray = new ArrayList<>();
        ArrayList<String> adjectivesArray = new ArrayList<>();

        while (true) {

            System.out.println("----------------------------------");
            System.out.println("\t1. Lag adjektivhistorie automatisk" + "\n\t2. Lag adjektivhistorie med egne adjektiver" + "\n\t3. Avslutt");
            System.out.println("----------------------------------");

            Scanner scanner = new Scanner(System.in);
            int userInput = scanner.nextInt();
            switch (userInput) {
                case 1:
                    System.out.println("\t### Her er din automatisk lagde historie: ###");

                    File storyFile = new File("X:\\Users\\xx\\IdeaProjects\\Trinn6\\story.txt");
                    File adjectivesFile = new File("X:\\Users\\xx\\IdeaProjects\\Trinn6\\adjektiv.txt");
                    Scanner storyScanner = new Scanner(storyFile);
                    Scanner adjectivesScanner = new Scanner(adjectivesFile);
                    String adjectives = adjectivesScanner.nextLine();

                    while ( storyScanner.hasNextLine() ) {
                        storyArray.add(storyScanner.nextLine());
                    }
                    System.out.println(storyArray);

                    for (int i = 0; i < storyArray.size(); i++) {
                        if (storyArray.get(i).equals("__")) {
                            storyArray.replaceAll(+ adjectivesArray);
                            break;
                        }

                    }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2013-03-14
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多