【问题标题】:Reading multiple lines into a scanner object in Java将多行读入Java中的扫描仪对象
【发布时间】:2017-07-14 17:23:11
【问题描述】:

我在弄清楚如何将多行用户输入读取到扫描仪中然后将其存储到单个字符串中时遇到了一些麻烦。 到目前为止我所拥有的如下:

public static String getUserString(Scanner keyboard) { 
    System.out.println("Enter Initial Text:");
    String input = "";
    String nextLine = keyboard.nextLine();
    while(keyboard.hasNextLine()){
        input += keyboard.nextLine
    };
    return input;
}

那么main方法的前三个语句是:

Scanner scnr = new Scanner(System.in);
String userString = getUserString(scnr);  
System.out.println("\nCurrent Text: " + userString );

我的目标是让用户在输入文本后,只需按两次 Enter 键,他们输入的所有内容就会显示在他们面前(在“当前文本:”之后)。我还需要将字符串存储在 main 的变量 userString 中(我必须在其他方法中使用这个变量)。对此的任何帮助将不胜感激。它是用于类的,我们不能使用数组或 Stringbuilder 或任何比 while 循环和基本字符串方法更复杂的东西。

谢谢!

【问题讨论】:

  • 这段代码 (a) 无法编译,并且 (b) 如果它编译了,它已经可以满足您的要求。不清楚你在问什么。

标签: java string class


【解决方案1】:

使用 BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";
String line;
while((line = br.readLine()) != null){
    if(line.isEmpty()){
        break; // if an input is empty, break
    }
    input += line + "\n";
}
br.close();
System.out.println(input);

或使用扫描仪

String input = "";
Scanner keyboard = new Scanner(System.in);
String line;
while (keyboard.hasNextLine()) {
    line = keyboard.nextLine();
    if (line.isEmpty()) {
        break;
    }
    input += line + "\n";
}
System.out.println(input);

对于这两种情况,示例 I/O:

Welcome to Stackoverflow
Hello My friend
Its over now

Welcome to Stackoverflow
Hello My friend
Its over now

完整代码

public static void main (String[] args) {
    Scanner scnr = new Scanner(System.in);
    String userString = getUserString(scnr);  
    System.out.println("\nCurrent Text: " + userString);
}

public static String getUserString(Scanner keyboard) { 
    System.out.println("Enter Initial Text: ");
    String input = "";
    String line;
    while (keyboard.hasNextLine()) {
        line = keyboard.nextLine();
        if (line.isEmpty()) {
            break;
        }
        input += line + "\n";
    }
    return input;
}

【讨论】:

  • 如果您的输入很大,您可能希望使用StringBufferStringBuilder 而不是附加到您的String。我相信每次连接一个字符串时,都会创建一个新的字符串副本。 stackoverflow.com/questions/3835806/…
猜你喜欢
  • 1970-01-01
  • 2014-05-20
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
相关资源
最近更新 更多