【问题标题】:How can I pick a random word then replace it to a new word?如何选择一个随机单词然后将其替换为一个新单词?
【发布时间】:2018-03-30 19:27:03
【问题描述】:

我需要将我在MovieList中随便挑的一个词替换成下划线“___”,我想创建一个新方法来处理它,新方法应该在guessMovies类下,然后我会调用下"object 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:(38, 14) java: cannot find symbol

符号:方法 replaceAll(java.lang.String,java.lang.String) 位置:java.util.Random 类型的变量 r

【问题讨论】:

  • 请发布编译器错误。
  • btw 变量名用驼峰式书写,但第一个字母为小写:movieNames 而不是MovieNames
  • 您是否导入了 Random? import java.util.Random;
  • 您正在对您的 Random 对象调用 replaceAllr.replaceAll("/[a-z0-9. ]/", "__");

标签: java random


【解决方案1】:

您的问题与变量范围有关。您想在您编写的方法中使用 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/

顺便说一句,类名应该以大写字母开头。

【讨论】:

  • 很确定这是r.replaceAll("/[a-z0-9. ]/", "__");这一行的问题,他试图在Random对象上调用字符串方法。
  • 是的,这是一个明显的错误,但他说他修复了代码和错误,所以我写信给他的评论。
  • 我认为他只是说他编辑了他的原始帖子以包含错误,但我可能读错了。
  • 据我所知,“r”是一个对象,但我如何使用字符串方法呢?你有什么方法可以在列表中获取一个随机的电影名称然后替换它?
【解决方案2】:

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

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: jacks revenge”

因此,更安全的方法是遍历您的电影并列出并重建字符串,不包括您要替换的随机索引,而是用下划线替换它。

【讨论】:

  • 我想在列表中随机选择一个电影,然后用下划线“__”替换一个随机电影,这样我就可以隐藏一个随机电影名称。
  • 刚刚用不同的方法编辑了我的评论。如果它没有为您解决问题,请提醒我。
  • 您好先生,我编辑了上面的代码,但它仍然给了我一个随机的电影名称,而不是下划线。我需要创建一个方法 >replaceAll
  • 是的,您正在打印出带有以下行的随机电影:String movieToReplace = MovieNames.get(r.nextInt(MovieNames.size())); System.out.println(movieToReplace);
猜你喜欢
  • 2015-01-26
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多