Java 打印从0开始的数字输入

Java 打印从0开始的数字输入,java,format,Java,Format,如果我输入0914325,它只打印914325。我知道,因为数据类型是长的。我可以使用字符串数据类型,但如果用户意外输入一个字母怎么办?有没有办法打印一个从0开始的数字?没有以0开始的数字 数字存储为数字,而不是文本。 由于004和4是相同的数字,因此它们的存储方式相同 如果您关心前导零,您应该使用字符串,而不是长的,因为您显然没有将其用作数字。 邮政编码或电话号码也是如此。正如SLaks所说,它总是会切断前导零。因此,如果您希望保留用户输入的原始格式,则必须将其存储为字符串。检查它是否为有效数

如果我输入
0914325
,它只打印
914325
。我知道,因为数据类型是长的。我可以使用
字符串
数据类型,但如果用户意外输入一个字母怎么办?有没有办法打印一个从0开始的数字?

没有以
0开始的数字

数字存储为数字,而不是文本。
由于
004
4
是相同的数字,因此它们的存储方式相同

如果您关心前导零,您应该使用
字符串,而不是
长的
,因为您显然没有将其用作数字。

邮政编码或电话号码也是如此。

正如SLaks所说,它总是会切断前导零。因此,如果您希望保留用户输入的原始格式,则必须将其存储为
字符串。检查它是否为有效数字的最佳方法是使用正则表达式

    Scanner input = new Scanner(System.in);
    System.out.print("\tEnter student no.: \t");
    long studNo = input.nextLong();
    System.out.println(studNo);
基本上,它的工作原理是将输入的字符串与提供的模式相匹配

所以我把[0-9]+作为要匹配的字符串,括号表示集合0-9中的任何数字。加号表示之前的模式重复一次或多次。因此,这将检查字符串中的每个字符,以确保它们在集合0-9内。请记住,如果您再次将其转换为数字类型,前导零将丢失。

使用

String s = input.getLine();
if(!s.matches("[0-9]+")){
    //prompt for input again
}

这就完成了所有需要的验证,在不匹配时抛出一个
NoTouchElementException

关于这一点,还有一个问题:有趣的是,你如何从“没有以
0
开头的数字”开始,然后以可能以零开头的电话号码为例结束。这里的问题可能是域语言:)。。也许最好是说,为了用前导的
0
来“保存”某些内容,您不能使用正常的“数字”类型,所以你需要一个
字符串
类型。@Nanne:电话号码通常的处理方式使它们不是数字:你通常用一种特殊的方式来格式化它们,它们甚至不能自动转换成彼此。例如,诸如“1-800-SOMETHING”之类的虚荣数字不会存储为其等效数字。@Nanne:否;我是说电话号码也不是数字。显然,我理解这一点,我试图说明,如果一个人没有在与你相同的领域中使用
number
,这会让人感到困惑,我试图通过你自己“双重”使用这个词来“证明”这一事实。因此,可以更清楚地指定“在大多数编程语言中,没有…”之类的内容。Ftr,只有意大利和科特迪瓦允许电话号码以零开头。
scanner.next("[0-9]+");