如何在Java中通过命令行获取输入?

4

我目前有这段需要用户输入的代码,用于伪造一些单词并在稍后对整数进行混淆。我只需要获取用户输入。有人知道一个好的API来源可以从中获取吗?我认为我应该寻找System. commands。

提前致谢 :)

4个回答

14

为了使获取输入变得更加容易,Java 5.0 实现了 Scanner 类:

Scanner input = new Scanner(System.in) 中的 System.in 可以允许从控制台输入。

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
/* will wait for input then assign it to the variable,
 * in this case it will wait for an int.
 */
System.out.println(i); // will print the variable

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html


扫描器是否必须作为某个类的一部分进行引用?此外,系统是否会自动导入? - user2262111
1
System.in 将会自动包含。 - Joban
1
@user System 属于 lang 包,该包中的所有类都会自动包含。 - Lone nebula
1
@user 不是路径是java.lang.System,但你不必导入它。 - Lone nebula
@user sc.next() 返回下一个单词(由空格、换行符或其他空白字符分隔),而 sc.nextLine() 返回下一行。 - Lone nebula
显示剩余2条评论

4
你是否正在寻找这个?由于你询问如何通过命令行获取输入,所以如果你通过命令行运行你的Java程序并想要传递一些输入,它们将被main中的args参数接收。 点击这里 回显命令行参数 Echo示例将每个命令行参数单独显示在一行上:
public class Echo {
    public static void main (String[] args) {
        for (String s: args) {
            System.out.println(s);
        }
    }
}

难道你不认为输入是通过“args”参数从命令行传入的吗?这是从命令行获取输入并将其打印到控制台的方法。你还有什么问题吗? - nommyravian
没有输入?你怎么从String[] args中获取输入?我的问题是我想把用户输入结合起来,这样我就可以拿它并使用比较命令了。 - user2262111
你知道如何从命令行运行Java程序吗?当你有一个Java程序,比如HelloWorld.java,并且想要使用命令行来运行它并获取用户输入时,你需要打开cmd,在HelloWorld.java所在的目录中运行代码,并在命令行中键入用户输入。这就是我的答案,因为你问如何从命令行获取输入。明白了吗? - nommyravian
1
如果您需要了解如何从命令行运行程序,请查看此链接:http://www.skylit.com/javamethods/faqs/javaindos.html - nommyravian
我认为你是通过命令行运行程序的。在对答案进行投票之前最好先看一下你的问题。 - nommyravian
显示剩余4条评论

2
您可能想使用Scanner类:java.util.Scanner 基本设置很简单:
Scanner scan = new Scanner(System.in);
int number = scan.nextInt();

这段代码创建了一个扫描器对象,并从默认输入流中获取一个整数。然而,它没有检查用户是否输入了“好的数据”。如果用户输入的不是数字,这将导致错误。您可能需要包含一个循环,直到用户输入有效的数据。

下面是带有错误检查的相同代码:

Scanner scan = new Scanner(System.in);
boolean validData = false;
int number=0;
do{
    System.out.println("Enter a Number");
    try{
        number = scan.nextInt();//tries to get data. Goes to catch if invalid data
        validData = true;//if gets data successfully, sets boolean to true
    }catch(InputMismatchException e){
        //executes when this exception occurs
        System.out.println("Input has to be a number. ");
    }
}while(validData==false);//loops until validData is true

该程序将要求用户输入一个数字。如果用户输入错误的数据,则会抛出InputMismatchException异常,将程序带到catch子句并跳过将validData设置为true的步骤。 这将循环直到输入有效数据。

希望这能帮到您。


Scanner类包含诸如hasNexthasNextInthasNextBoolean等方法,这使得它变得更加容易。 - Lone nebula

0
嗯,对于少量可预测输入的命令来说,System.in是可以很好地工作的。如果你想要一个更专业和健壮的机制,Apache有一个不错的小工具。
请参考:http://commons.apache.org/proper/commons-cli/

啊,SO。你这个奇怪的家伙。看来解析命令行输入有两种方法,其中一种是使用Apache Commons输入负数。今天越来越奇怪了。 - BrantApps
感谢您发布答案!请注意,您应该在此网站上发布答案的有用部分,否则您的帖子可能会被删除[请参阅FAQ中提到的“几乎只是链接”的答案](http://stackoverflow.com/faq#deletion)。如果您愿意,仍然可以包含链接,但仅作为“参考”。答案应该独立存在,不需要链接。您的回答可能会被投票反对,因为您所写的内容并没有明显表明您的答案是相关的;但是,如果您包含更多信息,那么它就会变得明显。 - Andrew Barber
感谢您的解释。我以前曾经犯过这个错误。但是在这种情况下,需要的代码可以使其正常工作,然后是使用简单方法的警告,以及其他人指定的方法之外的替代方法,这应该可以避免这种情况。我喜欢简洁明了,讨厌其他人对变化的解释中出现的“中国式耳语”。 - BrantApps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接