我在Java编程方面相当新,(几个月前刚刚开始)并且我目前处于一种混乱的状态中是不幸的。
我目前正在使用BlueJ进行编程,并且在我的书中遇到了一个练习,我确实遇到了一些问题,如何进一步添加想要的功能。
练习有两个先前创建的类(ReaderInput& WriterOutput),我将创建一个新类,它调用并使用前面的类方法。练习包括两个.txt文件,一个包含一个故事,第二个包含不同类型的形容词(单词)。然后,我必须阅读story.txt文件,并用特定值(一个值为“ADJECTIVE”的字符串)替换该文件中的字符串,并从adjectives.txt文件中随机选择单词,最后输出它们(写)到一个全新的文件。
来自story.txt文件的示例:
'很久以前,有一个女孩在一个ADJECTIVE生日那天和许多ADJECTIVE朋友一起过来......'
来自adjectives.txt文件的示例:
烦躁 旧 小 笨 等...
所以,我创建了一个新类,添加并初始化了ReaderInput类的新字段对象,就像这样;
private ReaderInput reader;
private WriterOutput writer;
private Random random;
public StoryCreator()
{
reader = new ReaderInput();
writer = new WriterOutput();
random = new Random();
}
然后我创建了一个名为createAdjectiveStory的新方法,其中包含用于指定故事文件名和形容词的参数。
public void createAdjectiveStory(String storyFilename, String adjectivesFilename/*, String outputFilename*/)
然后,我声明两个变量来保存ReaderInput类中的读者单词(指定要读取参数的文件):
ArrayList<String> story = reader.getWordsInFile(storyFilename);
ArrayList<String> adjective = reader.getWordsInFile(adjectivesFilename);
然后出现了很大的麻烦。虽然,我已经能够声明一个String变量wordToChange =“ADJECTIVE”; ,创建一个for-each循环来迭代故事arraylist集合,用if语句检查element中的string是否等于wordToChange。最后我随机地通过形容词arryalist,并从集合中得到一个随机单词(每当我调用该方法并单独打印时,这会从文件中获取一个随机单词)
for(String reader : story){
int index = random.nextInt(adjective.size());
String word = adjective.get(index);
if(reader.equals(wordToChange))
Collections.replaceAll(story,wordToChange,word);
}
}
在if语句中,我尝试使用replaceAll函数,如下所示:
Collections.replaceAll(story,wordToChange,word);
这里的问题是,如果我尝试打印出来(只是为了验证它是否有效),我明白了:
'曾几何时,有一个老女孩正在和一个老朋友等老人生日一起过来......'
现在我想要这个。
'曾几何时,有一个老女孩在白天和很多愚蠢的朋友一起度过了一段时间......“
我尝试过使用.replace函数,如下所示:
Collections.replace(story,wordToChange,word);
但是我收到一个错误,指出:'找不到符号 - 方法替换'。
我在这里非常正确,我似乎找不到合适的解决方案。 Ayone有任何提示/技巧或解决方案吗?
新程序员需要朝着正确的方向“推”一点。任何帮助将受到高度赞赏:)
答案 0 :(得分:1)
问题在于它选择单词将其更改为一次,然后replaceAll立即替换REPLACE的每个实例。
你应该做的是在for循环中使用迭代器:
Iterator<String> i=story.iterator();
while (i.hasNext()) {
String check = i.next();
if (check.equals(stringToReplace)) {
i.set(getRandomAdjective());
}
}
您应该为代码创建一个方法来获取随机形容词。