我需要将我在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
答案 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:杰克复仇”
所以更安全的方法是循环播放你的电影和列表并重建字符串,排除你要替换的随机索引,而不是用下划线替换它。