我目前正在学校的一个项目,我将在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);
}
}
}
希望有人知道如何管理这个。
答案 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")
,假设这就是您的意思。