正如在Java Standard Editions docs中所指定的,任何数量的下划线字符(_)都可以出现在数字文字中数字之间的任何位置,如:-int number = 100_000;.

出于好奇,我try 将下划线分隔的值(100_000)输入到需要整数的输入中.代码:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int basicAmount = sc.nextInt();
    }
}

这导致出现一般性错误消息.

所以我的问题是:

  1. 为什么会发生这种情况?为什么不允许输入包含下划线的数值?
  2. 有没有办法允许用户输入with个下划线的数值?

推荐答案

您引用的文档是关于Java源代码的.据说这样的事情是可能的:

int i = 123_456_789; // same as int i = 123456789;

Scanner读取的文本不是Java源代码.

在这种情况下,您应该阅读的相关文档是Scanner.nextInt,这将使您达到here指定的可接受格式.很明显,Scanner.nextInt不接受带下划线的数字.

读取带有下划线的数字的一种简单方法是只读取一个标记,然后删除其中的所有下划线:

int input = Integer.parseInt(sc.next().replaceAll("_", ""));

Java相关问答推荐

Maven Google Sheets版本问题

为什么Java中的两个日期有差异?

使用java访问具体子类特定方法的最佳方法是什么?

有没有办法让扩展变得多态?

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

使用Spring和ActiveMQ的侦听器方法引发属性名称不能重复为空警告

如何获取Instant#of EpochSecond(?)的最大值

PDFBox未加载内容

JDK 21-为什么线程局部随机S nextInt不直接用Super.nextInt实现?

自定义批注的外推属性值

Javadoc在方法摘要中省略方法

Spring安全令牌刷新和JWT签名与本地计算的签名不匹配

使用Class.this.field=Value初始化构造函数中的最后一个字段会产生错误,而使用this.field=Value则不会

在settings.gradle.kts和Build.gradle.kts中使用公共变量

我如何为我的Java抵押贷款代码执行加薪操作(&Q)

除0错误/抱歉我的句子是PT

在一行中检索字符分隔字符串的第n个值

何时调用密封层次 struct 的switch 中的默认情况

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API

JavaFX中ListView中的问题