从标准输入读取一行时如何限制字数?

我是 Stackoverflow 的新手,这是我第一次提问。我彻底搜索了我的问题,但是找不到合适的答案。如果有人问这个问题,我很抱歉。先感谢您。

问题来自Hyperskill.com,如下:

编写一个程序,从标准输入读取五个单词,并在新行中输出每个单词。首先,您需要打印第一行的所有单词,然后打印第二行的所有单词(从左到右)。

输入示例 1:

该 Java 课程
是自适应的

示例输出 1:


Java
课程

自适应的

我尝试解决它

import java.util.Scanner;


public class Main {

    public static void main(String[] args) {

        /* I have not initialized the "userInput" String.

         * I know that String is immutable in Java and

         * if I initialize it to an empty String ""

         * and read a String from user.

         * It will not overwrite to the "userInput" String.

         * But create another String object to give it the value of the user input,

         * and references the new String object to "userInput".

         * I didn't want to waste memory like that.

         */

        String userInput;

        String[] userInputSplitFirstLine = new String[3];

        String[] userInputSplitSecondLine = new String[2];

        Scanner scan = new Scanner(System.in);

        userInput = scan.nextLine();

        userInputSplitFirstLine = userInput.split("\\s+");

        userInput = scan.nextLine();

        userInputSplitSecondLine = userInput.split("\\s+");

        for(String firstLineSplitted: userInputSplitFirstLine) {

            System.out.println(firstLineSplitted);

        }

        for(String secondLineSplitted: userInputSplitSecondLine) {

            System.out.println(secondLineSplitted);

        }

        scan.close();

    }

}

如果您尝试上面的示例输入,输出将与上面的示例输出匹配。但是,如果您在第一行写入超过 3 个字和/或在第二行写入超过 2 个字,则大小userInputSplitFirstLine为 3 的数组将存储超过 3 个字。数组也是如此userInputSplitSecondLine。我的第一个问题是,大小为 3 的数组 (userInputSplitFirstLine) 和大小为 2 的数组 (userInputSplitSecondLine) 如何分别容纳超过 3 个和 2 个元素?我的第二个问题是如何限制用户可以在一行中插入的单词数?例如,第一行只接受3个单词,第二行只接受2个单词?


收到一只叮咚
浏览 132回答 5
5回答

qq_笑_17

您可以使用扫描仪对象的下一个方法来读取字符串,然后可以轻松地在新行上打印它。while(true){            if(scanner.hasNext()){                System.out.println(scanner.next());            }            else{                break;            }}

翻阅古今

我认为这应该可以完成工作。如果您有任何疑问,请随时询问。import java.util.Scanner;class App {    public static void main(String[] args) {        final StringBuffer line = new StringBuffer();        final StringBuffer words = new StringBuffer();        try (final Scanner sc = new Scanner(System.in)) {            while (sc.hasNextLine()) {                final String currentLine = sc.nextLine();                line.append(currentLine).append(System.lineSeparator());                for (final String word : currentLine.split("\\s+")) {                    words.append(word).append(System.lineSeparator());                }            }        } finally {            System.out.println(line.toString());            System.out.println();            System.out.println(words.toString());        }    }}

沧海一幻觉

我的第一个问题是,大小为 3 的数组 (userInputSplitFirstLine) 和大小为 2 的数组 (userInputSplitSecondLine) 如何分别容纳超过 3 个和 2 个元素?这里的数组:String[] userInputSplitFirstLine = new String[3];与您收到的不同split:userInputSplitFirstLine = userInput.split("\\s+");当您执行上述分配时,其中的旧数组基本上被“覆盖”,现在userInputSplitFirstLine引用的新数组的长度与旧数组的长度无关。split 总是返回一个新数组。我的第二个问题是如何限制用户可以在一行中插入的单词数?例如,第一行只接受3个单词,第二行只接受2个单词?这实际上取决于您所说的“限制”是什么意思。如果你只是想检查是否正好是三个单词,如果不是,则退出程序,你可以这样做:userInputSplitFirstLine = userInput.split("\\s+");if (userInputSplitFirstLine.length != 3) {    System.out.println("Please enter exactly 3 words!");    return;}您可以对第二行执行类似的操作。如果您希望用户无法输入超过 3 个单词,那么这是不可能的,因为这是一个命令行应用程序。顺便说一句,建议的解决方案中的代码可以工作,因为next()默认返回下一个“单词”(或者我们通常认为的单词)。

慕码人8056858

解决问题的方法:编写一个程序,从标准输入读取五个单词,并在新行中输出每个单词。这是我的解决方案:while(scanner.hasNext()){       System.out.println(scanner.next()); }

慕姐8265434

希望对你有帮助!&nbsp; &nbsp; public class pratice1 {&nbsp; &nbsp; public static void main (String[]args) {&nbsp; &nbsp; Scanner sc = new Scanner(System.in);&nbsp; &nbsp; String input = sc.nextLine();&nbsp; &nbsp; String input1 = sc.nextLine();&nbsp; &nbsp; char[]a =input.toCharArray();&nbsp; &nbsp; char[]a1 = input1.toCharArray();&nbsp; &nbsp; System.out.println(input +""+ input1);&nbsp; &nbsp; int a2=0;&nbsp; &nbsp; if(input!=null) {&nbsp; &nbsp; for(int i=0;i<input.length();i++) {&nbsp; &nbsp; &nbsp; &nbsp; if(a[i]==' ') {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a2=i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(int j=0;j<a2;j++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(a[i]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a2=0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else System.out.print(a[i]);&nbsp; &nbsp; }System.out.println("");&nbsp; &nbsp; for(int i=0;i<input1.length();i++) {&nbsp; &nbsp; &nbsp; &nbsp; if(a1[i]==' ') {&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a2=i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(int j=0;j<a2;j++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(a1[i]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a2=0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else System.out.print(a1[i]);&nbsp; &nbsp; }&nbsp; &nbsp; }}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java