我是Java编程的新手,我刚刚在学校完成了一项任务,我正在努力学习。您在下面看到的代码是我允许编辑的唯一代码。
分配是在txt文件中找到单词“ADJEKTIV”,并用另一个仅包含形容词的txt文档中的随机形容词替换它。这部分我认为我钉了。但是当我尝试使用另一个名为OutputWriter的类的write方法时,似乎不会对包含“ADJEKTIV”的字符串进行新的更新。我是否需要以某种方式“更新”ArrayList以保持更改?
import java.util.*;
/**
* Class documentation needed!
*/
public class StoryCreator
{
private InputReader reader;
private OutputWriter writer;
private Random random;
public StoryCreator()
{
reader = new InputReader();
writer = new OutputWriter();
random = new Random();
}
public String randomAdjective(String adjectivesFilename)
{
ArrayList<String> adjectives = reader.getWordsInFile(adjectivesFilename);
int index = random.nextInt(adjectives.size());
return adjectives.get(index);
}
public void createAdjectiveStory(String storyFilename, String adjectivesFilename, String outputFilename)
{
ArrayList<String> story = reader.getWordsInFile(storyFilename);
for(String s : story)
{
if(s.contains("ADJEKTIV."))
{
s = randomAdjective(adjectivesFilename) + ". ";
}
if(s.contains("ADJEKTIV"))
{
s = randomAdjective(adjectivesFilename);
}
}
writer.write(story, outputFilename);
}
}
这是OutputWriter-class的方法:
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 :(得分:2)
您没有使用
更新列表s = randomAdjective(adjectivesFilename);
您实施了新的String
,这不再是List
中的实例。
您需要将该值设置到列表中。为此,您需要跟踪索引并使用List.set(int, E)
更新特定位置的列表。
最简单的等级。将循环更改为:
for( int i = 0; i < story.size(); i++){
String s = story.get(i);
if(s.contains("ADJEKTIV."))
{
//replace the value with a new one.
s = randomAdjective(adjectivesFilename) + ". ");
story.set(i, s);
/* OR shorter
story.set(i, randomAdjective(adjectivesFilename) + ". ");
*/
}
...
}
答案 1 :(得分:0)
您也可以使用 replaceAll 方法替换所有出现的次数,而不是迭代ArrayList。
public void createAdjectiveStory(String storyFilename, String adjectivesFilename, String outputFilename)
{
ArrayList<String> story = reader.getWordsInFile(storyFilename);
story.replaceAll(new UnaryOperator<String>() {
public String apply(String original) {
if(original.contains("ADJEKTIV."))
return randomAdjective(adjectivesFilename) + ". ";
if(original.contains("ADJEKTIV"))
return randomAdjective(adjectivesFilename);
return original;
}
});
writer.write(story, outputFilename);
}