为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2023-09-06 16:47:00
我是 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个单词?
查看完整描述

5 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以使用扫描仪对象的下一个方法来读取字符串,然后可以轻松地在新行上打印它。


while(true){

            if(scanner.hasNext()){

                System.out.println(scanner.next());

            }

            else{

                break;

            }

}


查看完整回答
反对 回复 2023-09-06
?
翻阅古今

TA贡献1780条经验 获得超5个赞

我认为这应该可以完成工作。如果您有任何疑问,请随时询问。


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());

        }

    }

}


查看完整回答
反对 回复 2023-09-06
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

我的第一个问题是,大小为 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()默认返回下一个“单词”(或者我们通常认为的单词)。


查看完整回答
反对 回复 2023-09-06
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

解决问题的方法:

编写一个程序,从标准输入读取五个单词,并在新行中输出每个单词。

这是我的解决方案:

while(scanner.hasNext()){
      System.out.println(scanner.next());
}


查看完整回答
反对 回复 2023-09-06
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

希望对你有帮助!


    public class pratice1 {

    public static void main (String[]args) {

    Scanner sc = new Scanner(System.in);

    String input = sc.nextLine();

    String input1 = sc.nextLine();

    char[]a =input.toCharArray();

    char[]a1 = input1.toCharArray();

    System.out.println(input +""+ input1);

    int a2=0;

    if(input!=null) {

    for(int i=0;i<input.length();i++) {

        if(a[i]==' ') { 

            a2=i;

            for(int j=0;j<a2;j++) {

                System.out.println(a[i]);

                a2=0;

            }

        }

        else System.out.print(a[i]);

    }System.out.println("");

    for(int i=0;i<input1.length();i++) {

        if(a1[i]==' ') {    

            a2=i;

            for(int j=0;j<a2;j++) {

                System.out.println(a1[i]);

                a2=0;

            }

        }

        else System.out.print(a1[i]);

    }

    }


}

}


查看完整回答
反对 回复 2023-09-06
  • 5 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信