1
    Scanner input = new Scanner(System.in);
    System.out.print("\tEnter student no.: \t");
    long studNo = input.nextLong();
    System.out.println(studNo);

如果我输入0914325它只会打印914325. 我知道是因为数据类型是long. 我可以使用String数据类型,但如果用户不小心输入了字母怎么办?有什么办法可以打印一个从 0 开始的数字吗?

4

3 回答 3

3

不存在以 开头的数字0

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

如果您关心前导零,则应该使用 a String,而不是 a Long,因为您显然没有将它用作数字。
邮政编码或电话号码也是如此。

于 2013-01-21T14:30:22.407 回答
0

正如 SLaks 所说,它总是会切断前导零。String因此,如果要保留用户输入的原始格式,则绝对应该将其存储为 a 。检查它是否是有效数字的最佳方法是使用正则表达式。

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

基本上这是如何工作的,它将输入的字符串与提供的模式相匹配。

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

于 2013-01-21T14:36:49.607 回答
0

利用

scanner.next("[0-9]+");

这完成了您需要的所有验证,引发了NoSuchElementException不匹配。

于 2013-01-21T15:07:32.670 回答