我正在使用Java的intro cse课程,我有一个新的作业,我使用文件处理创建一个Mad Lib游戏。
我想知道用“酷”这样的形容词替换String占位符最好的方法是什么
这是我的代码的一小部分
PrintStream fileOutput = new PrintStream(new File(fileName));
Scanner fileScan = new Scanner(new File(fileName));
while (fileScan.hasNextLine()) {
String line = fileScan.nextLine();
Scanner word = new Scanner(line);
while (word.hasNext()) {
String token = word.next();
if (token.startsWith("<") && token.endsWith(">")) {
token = token.replace("<", "");
token = token.replace(">", "");
}
fileOutput.print(token + " ");
}
}
我目前得到'&lt;'和'&gt;'处理的字符,但我不确定最好的方法是替换两个括号之间的字符。例如,如果我将标记识别为占位符并且是形容词,则会使用正确的a / an结构提示用户“键入形容词”和名词“键入名词”。在过去的作业中,我会得到正确的外在正确性,但我的风格是“坏”或“不正确”
答案 0 :(得分:0)
我不完全确定这是否是您正在寻找的答案,但我会试一试。您似乎对以下几点感兴趣:
PrintWriter是一个Java类,它允许您像扫描一样写入文件而不是扫描它。如果您打算基于带有形容词,动词等标签的模板生成疯狂的libs响应,那么您可能要做的就是扫描文件并在解析它们时将内容写入新输出。要获取用户输入,您可以使用单独的Scanner对象,该对象从System.in获取值。例如,您将要使用以下内容:
PrintWriter writer = new PrintWriter(file);
Scanner scanner = new Scanner(file);
Scanner input = new Scanner(System.in);
(your previous code here)
if (token.startsWith("<") && token.endsWith(">")
{
System.out.println("Type a " + token + ":";
writer.write(input.next());
}
else
{
writer.write(token);
}
这显然并不完美,但希望你能得到这个想法。如果在扫描每个单词时未检测到任何标记,则将该单词写入该文件。如果检测到标记,则让用户定义在其位置写入的内容。继续执行文件的其余部分。
编辑:我刚回去看到你使用的是PrintStream。这将做同样的事情。我的答案的目的主要是概念的证明。
答案 1 :(得分:0)
这样的事情怎么样:
Scanner input = new Scanner(System.in);
// ...
while (word.hasNext()) {
String token = word.next();
if (token.startsWith("<") && token.endsWith(">")) {
token = token.substring(1, token.length() - 1);
String article = token.matches("(?i)[aeiou].*") ? "an" : "a";
System.out.println("Type " + article + " " + token);
token = input.next();
}
fileOutput.print(token + " ");
}