用不同的字符替换字符串占位符

时间:2016-02-22 07:40:28

标签: java string file-processing

我正在使用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结构提示用户“键入形容词”和名词“键入名词”。在过去的作业中,我会得到正确的外在正确性,但我的风格是“坏”或“不正确”

2 个答案:

答案 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 + " ");
    }