Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用另一个ArrayList中的随机字符串替换ArrayList中的特定字符串_Java_String_File_Arraylist_Filereader - Fatal编程技术网

Java 用另一个ArrayList中的随机字符串替换ArrayList中的特定字符串

Java 用另一个ArrayList中的随机字符串替换ArrayList中的特定字符串,java,string,file,arraylist,filereader,Java,String,File,Arraylist,Filereader,我对java编程相当陌生(几个月前才开始),不幸的是,我现在有点困惑 我目前正在使用BlueJ进行编程,我在书中遇到了一个练习,在掌握如何进一步添加所需功能方面确实存在一些问题 这个练习有两个以前创建的类(ReaderInput和WriterOutput),我将创建一个新类,该类调用并使用前面的类方法。这个练习包括两个.txt文件,一个包含一个故事,第二个包含不同种类的形容词(单词)。然后,我必须读取story.txt文件,并将该文件中的字符串替换为一个特定的值(值为“形容词”的字符串),然后从

我对java编程相当陌生(几个月前才开始),不幸的是,我现在有点困惑

我目前正在使用BlueJ进行编程,我在书中遇到了一个练习,在掌握如何进一步添加所需功能方面确实存在一些问题

这个练习有两个以前创建的类(ReaderInput和WriterOutput),我将创建一个新类,该类调用并使用前面的类方法。这个练习包括两个.txt文件,一个包含一个故事,第二个包含不同种类的形容词(单词)。然后,我必须读取story.txt文件,并将该文件中的字符串替换为一个特定的值(值为“形容词”的字符串),然后从approxes.txt文件中随机选择单词,最后将它们输出(写入)到一个全新的文件中

story.txt文件中的示例:

“从前,有一个形容词女孩和很多形容词朋友一起过着形容词生日等等……”

形容词.txt文件中的示例:

发牢骚 古老的 小的 愚蠢的 等等

因此,我创建了一个新类,添加并初始化ReaderInput类的新字段对象,如下所示

private ReaderInput reader;
private WriterOutput writer;
private Random random;

public StoryCreator()
{
    reader = new ReaderInput();
    writer = new WriterOutput();
    random = new Random();
}
然后,我创建了一个名为create形容词story的新方法,并使用参数指定故事文件名和形容词

public void createAdjectiveStory(String storyFilename, String adjectivesFilename/*, String outputFilename*/)
然后,我声明两个变量来保存ReaderInput类中的reader字(指定要通过参数读取的文件):

在if语句中,我尝试使用replaceAll函数,如下所示:

Collections.replaceAll(story,wordToChange,word); 
这里的问题是,如果我试图打印出来(只是为了验证它是否有效),我会得到以下结果:

“从前,有一个老女孩和许多老朋友一起过生日,等等……”

现在我想要这个

“从前,有一个老姑娘,她出生那天和许多愚蠢的朋友在一起,哭哭啼啼……”

我尝试使用.replace函数,如下所示:

Collections.replace(story,wordToChange,word);
但我在指定“找不到符号-方法替换”时出错

我被困在这里,似乎找不到解决这个问题的正确方法。Ayone对此有什么建议/窍门或解决方案吗


新程序员需要在正确的方向上“推动”。任何帮助都将受到高度赞赏:)

问题在于,它选择的单词将其更改为一次,然后replaceAll将立即替换REPLACE的每个实例

相反,您应该在for循环中使用迭代器:

Iterator<String> i=story.iterator();
while (i.hasNext()) {
    String check = i.next();
    if (check.equals(stringToReplace)) {
        i.set(getRandomAdjective());
    }
}
Iterator i=story.Iterator();
while(i.hasNext()){
字符串检查=i.next();
如果(检查等于(stringToReplace)){
i、 set(getrandom形容词());
}
}

您应该为代码创建一个方法来获取随机形容词。

您得到的错误是因为它不是一个有效的方法。您在这里遇到了一个概念问题。要替换的词,即形容词,需要两个词:旧词和新词。那些是从哪里来的?作为
列表
您只有一个单词。我会和你的老师核实第二个文件的格式,它可能每行有两个单词或者类似的东西。谢谢Tim B!现在工作得很漂亮:)
Collections.replace(story,wordToChange,word);
Iterator<String> i=story.iterator();
while (i.hasNext()) {
    String check = i.next();
    if (check.equals(stringToReplace)) {
        i.set(getRandomAdjective());
    }
}