如何选择随机单词然后将其替换为新单词?

时间:2017-10-18 20:05:45

标签: java random

我需要将我在MovieList中选择的随机单词替换为下划线" ___",我想创建一个新方法来处理它,新方法应该在类guessMovies下,然后我将调用"对象r"下的方法。将每个单词替换为下划线,但Java说它找不到符号(它不知道" r"是什么)。请帮忙。

谢谢

我将对象r放在try / catch范围之外,并使用此代码

            String movieToReplace = MovieNames.get(r.nextInt(MovieNames.size()));
        System.out.println(movieToReplace);
        MovieList.replaceAll(movieToReplace, "_");

但似乎它仍然给我随机的电影名称,而不是下划线" _"

public class guessMovies {

private static Random randomGenerator;



public static void main(String[] args) throws IOException {

    String MovieList;
    ArrayList<String> MovieNames = new ArrayList<>();
    Random r = new Random();



    try (BufferedReader br = new BufferedReader(new FileReader("MovieList.txt"))) {

        while ((MovieList = br.readLine()) != null) {
            MovieNames.add(MovieList);
        }

        for(String movieName: MovieNames){
            System.out.println(movieName);
        }


        String movieToReplace = MovieNames.get(r.nextInt(MovieNames.size()));
        System.out.println(movieToReplace);
        MovieList.replaceAll(movieToReplace, "____");

    }

    catch(FileNotFoundException exception) {
        System.out.println("I cannot find your file");

    }
    //pick random movie
}

}

ERROR:

Error:(38, 14) java: cannot find symbol

symbol:方法replaceAll(java.lang.String,java.lang.String)   location:java.util.Random类型的变量r

2 个答案:

答案 0 :(得分:0)

您的问题与变量范围有关。您希望在您编写的方法中使用r,但您的方法不在try/catch块中。只需在try/catch块之外创建r,你就可以了。像这样:

Random r; try (BufferedReader br = new BufferedReader(new FileReader("MovieList.txt"))) { r = new Random();

类似的问题:

Why does a Try/Catch block create new variable scope?

我建议你阅读http://www.geeksforgeeks.org/variable-scope-in-java/

Btw类名称应以大写字母开头。

答案 1 :(得分:0)

现在,您正尝试使用以下行在String对象上调用Random方法:

r.replaceAll("/[a-z0-9. ]/", "__");

由于Random没有方法replaceAll(),因此您会收到错误。

我认为你要做的是用原始字符串替换你的电影中的下划线。

    Random r = new Random();
    String movieToReplace = MovieNames.get(r.nextInt(MovieNames.size()));
    MovieList.replaceAll(movieToReplace, "_____");

但是,这种方法对所有情况都不安全。例如,如果列表中有两部电影:[“titanic”,“titanic 2:jacks revenge”] 你在“泰坦尼克号”上做replaceAll()然后你的字符串将是“_______ _______ 2:杰克复仇”

所以更安全的方法是循环播放你的电影和列表并重建字符串,排除你要替换的随机索引,而不是用下划线替换它。