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



我目前在学校做一个项目,在那里我要切换ArrayList中的某个单词。这个单词在单子上写了好几遍。我将用另一个ArrayList中的一个随机单词来更改它。我的循环目前可以按照我的意愿工作,我可以让它变得更好,但它可以在atm上工作。正在更改的单词是"ADJEKTIV">

我的问题是我无法将它写入文件。它将使用System.out.println-to-terminal打印出来,但赋值告诉我们将其写入文件。

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);
}
}

}

希望有人知道我该怎么做

您正在循环使用String word : storyWords,并用随机词替换word对象。到目前为止还不错。

我认为你的问题就在这里:

String story = words.replace(replaceKeyword,randAdjective);
System.out.println(story);
writer.write(storyWords, outputFilename);

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

这带来了一个新的问题,即storyWords中的String的替换,因为尝试在for each循环中进行修改将引发异常。

我认为最好使用普通的for loop而不是for-each来保持String在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"),假设这就是你的意思。

最新更新