如何在Java中永久设置Locale,使点为默认小数分隔符?
Java中默认小数分隔符改为点(.)的永久解决方案(无需修改系统区域设置)
主要使用Python,刚接触Java,在Windows系统的IntelliJ IDEA中开发时,输入以点(.)作为分隔符的小数会触发InputMismatchException。已知问题与Locale相关,通过Locale.setDefault修改仅临时生效,希望无需修改Windows区域语言设置,通过环境变量或IDE设置永久将默认小数分隔符设为点,避免为每个脚本添加代码。
最小复现示例
import java.util.Scanner; public class DecimalError { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter decimal number: "); double decimal = scanner.nextDouble(); } }
错误信息
C:\Users\XYZ\.jdks\openjdk-20.0.1\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\lib\idea_rt.jar=61309:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath "D:\Dokumente\Programming\Java for Absolute Beginners\HelloWorld\out\production\HelloWorld" DecimalError Enter decimal number: 2.5 Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:947) at java.base/java.util.Scanner.next(Scanner.java:1602) at java.base/java.util.Scanner.nextDouble(Scanner.java:2573) at DecimalError.main(DecimalError.java:8) Process finished with exit code 1
成功执行示例
C:\Users\XYZ\.jdks\openjdk-20.0.1\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\lib\idea_rt.jar=61318:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath "D:\Dokumente\Programming\Java for Absolute Beginners\HelloWorld\out\production\HelloWorld" DecimalError Enter decimal number: 2,5 Process finished with exit code 0
解决方案
1. IntelliJ IDEA全局设置(所有项目生效)
- 打开IDEA,依次点击
File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner(或直接搜索VM Options) - 在
VM Options输入框中添加:-Duser.language=en -Duser.country=US - 保存设置后,所有新建或现有项目运行时都会使用英文Locale,默认小数分隔符为点
2. 单个项目设置(仅当前项目生效)
- 点击IDEA右上角的运行配置下拉菜单,选择
Edit Configurations... - 在对应运行配置的
VM options栏中添加:-Duser.language=en -Duser.country=US - 保存后,仅当前项目的Java程序会使用该Locale
3. 系统环境变量设置(全局所有Java程序生效)
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 点击「系统变量」区域的「新建」,变量名填
JAVA_TOOL_OPTIONS,变量值填-Duser.language=en -Duser.country=US - 重启IntelliJ IDEA后生效,所有Java程序(包括命令行运行的)都会默认使用英文Locale
4. 代码层面全局处理(备选)
如果不想修改JVM参数,可以在项目的公共初始化代码中设置一次Scanner的默认Locale:
import java.util.Locale; import java.util.Scanner; public class GlobalScannerSetup { static { Scanner.setLocale(Locale.US); } }
将这个类放在项目中,确保它在其他代码之前加载,后续所有Scanner实例都会自动使用US Locale。
内容的提问来源于stack exchange,提问作者silence_of_the_lambdas
相关产品推荐
相关产品推荐

