如何使用"写"获取每个循环的信息

时间:2017-10-25 09:42:28

标签: java

我目前正在学校的一个项目,我将在ArrayList中切换出某个单词。这个词在列表中写了好几次。我将使用来自不同ArrayList的随机单词来更改它。我的循环目前正如我想的那样工作,我可以让它变得更好,但它可以工作。改变这个词是" ADJEKTIV"

我的问题是我无法写入文件。它将使用System.out.println打印到终端,但是赋值告诉我们将其写入文件。

public class StoryCreator
{
    private InputReader reader;
    private OutputWriter writer;
    private Random random;

public StoryCreator()
{
    reader = new InputReader();
    writer = new OutputWriter();
    random = new Random();
}


public void createAdjectiveStory(String storyFilename, String adjectivesFilename, String outputFilename)
    {

        ArrayList<String> storyWords = reader.getWordsInFileWithScanner(storyFilename);

        ArrayList<String> adjectives = reader.getWordsInFileWithScanner(adjectivesFilename);

        String replaceKeyword = "ADJEKTIV";

        for(String words : storyWords)
        {
            if(storyWords.contains("ADJEKTIV"))
            {
                int adjectiveNumber = random.nextInt(adjectives.size());
                String randAdjective = adjectives.get(adjectiveNumber);

                String story = words.replace(replaceKeyword,randAdjective);

                System.out.println(story);
                writer.write(storyWords, outputFilename);
            }

        }



    }

我已将文本写入文件中,但它没有将文件写入我已替换我想要的文字的位置。它在更改单词之前写入文件。

输出编写器类

public class OutputWriter

{

/**
 * Constructor for objects of class OutputWriter
 */
public OutputWriter()
{
}

/**
 * Writes a list of words to a file. The words are separated by the 'space' character.
 * 
 * @param  output   the list of words
 * @param  filename   the name of the output file
 */
public void write(ArrayList<String> output, String filename)
{
    try {
        FileWriter out = new FileWriter(filename);
        for(String word : output) {
            out.write(word + " ");
        }
        out.close();
    }
    catch(IOException exc) {
        System.out.println("Error writing output file: " + exc);
    }

}

}

希望有人知道如何管理这个。

1 个答案:

答案 0 :(得分:0)

您正在循环String word : storyWords并用随机字替换word对象。所以,非常好。

我认为你遇到的问题是:

String story = words.replace(replaceKeyword,randAdjective);

System.out.println(story);
writer.write(storyWords, outputFilename);

使用story写出System.out.println(story)对象,然后将storyWords对象写出到文件中。此storyWords列表将包含旧版String,因为您尚未将其替换为story(其中包含替换)。这就是您在写入文件时看到旧词的原因。

这引发了在storyWords中替换String的新问题,因为尝试在for-each循环中进行修改会引发异常。

我认为最好使用普通for loop代替for-each来保持字符串在storyWords内的位置,以便您可以进行替换。

for(int i = 0 ; i < storyWords.size() ; i++)
{
    String word = storyWords.get(i);
    if(word.contains("ADJEKTIV"))
    {
        int adjectiveNumber = random.nextInt(adjectives.size());
        String randAdjective = adjectives.get(adjectiveNumber);

        String story = word.replace(replaceKeyword, randAdjective);

        System.out.println(story);

        storyWords.set(i, story);

        writer.write(storyWords, outputFilename);
    }
}

我认为那应该是你要找的东西。

我保持代码尽可能接近您最初编写的内容。

我确实将storyWords.contains("ADJEKTIV")更改为word.contains("ADJEKTIV"),假设这就是您的意思。