更改Java语言环境

更改Java语言环境,java,java-8,javafx-8,Java,Java 8,Javafx 8,我正试图通过这种方式设置区域设置 Locale ar = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build(); Locale.setDefault(ar); 我在这里尝试将编号系统从拉丁语改为阿拉伯语 比如我打电话的时候 int i = 1000; System.out.println(i); 直到我使用NumberFormat NumberFormat nf = NumberFormat.getNumberInsta

我正试图通过这种方式设置区域设置

Locale ar = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build();
Locale.setDefault(ar);
我在这里尝试将编号系统从拉丁语改为阿拉伯语 比如我打电话的时候

int i = 1000;
System.out.println(i);
直到我使用
NumberFormat

NumberFormat nf = NumberFormat.getNumberInstance(ar);
String s = nf.format(i);
System.out.println(s);
这样,它就可以正确地打印阿拉伯数字。
我需要一种用阿拉伯语显示所有数字的方法,请帮助。

也许您可以尝试为程序中的所有
Swing
组件设置默认区域设置:

Locale ar = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build();
JComponent.setDefaultLocale(ar);
根据定义,是一种不区分区域设置的操作,它不受默认
区域设置更改的影响

你可以求助于

System.out.printf("%d%n", i);
这确实尊重当地的情况


更详细地说:

普林顿 文件规定:

打印一个整数,然后终止该行。此方法的行为就像调用
print(int)
然后调用
println()

鉴于

打印一个整数。
string.valueOf(int)
生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照
write(int)
方法写入

这导致我们:

返回int参数的字符串表示形式

表示形式正好是一个参数的
Integer.toString
方法返回的表示形式

返回表示指定整数的
字符串
对象。参数转换为带符号的十进制表示形式并作为字符串返回,就像参数和基数10作为
toString(int,int)
方法的参数一样

:

[……] 如果第一个参数为负数,则结果的第一个元素是ASCII减号
'-'
'\u002D'
)。如果第一个参数不是负数,则结果中不会出现符号字符

结果的其余字符表示第一个参数的大小。如果幅值为零,则由单个零字符
'0'
'\u0030'
)表示;否则,幅值表示的第一个字符将不是零字符。以下ASCII字符用作数字:

0123456789abcdefghijklmnopqrstuvwxyz

这些是通过
'\u0030'
'\u0039'
'\u0061'
'\u007A'

因此,在这条漫长的道路的尽头,我们看到一个规范没有为特定于区域设置的结果留下任何空间

printf 与(请注意,是偶数):

使用指定的格式字符串和参数将格式化字符串写入此输出流的方便方法

此方法的调用形式为
out.printf(format,args)
,其行为方式与调用完全相同

out.format(格式,参数)

参数: 格式-如中所述的格式字符串

这是一个相当大的规格。我们必须考虑以下因素:

以下转换可应用于
字节
字节
整数

'd'
'\u0064'
将参数格式化为十进制整数。应用了该方法

[……]

该部分正上方描述了以下内容:

数字定位算法 在获得整数部分、小数部分和指数(适用于数据类型)的数字后,将应用以下转换:

  • 字符串中的每个数字字符d都被相对于当前语言环境的z计算的特定于语言环境的数字替换;这就是d-
    '0'
    +z
  • 如果存在十进制分隔符,则替换特定于语言环境的分隔符
  • 如果给出了“
    ”、“
    ”\u002c“
    )标志,则通过扫描字符串的整数部分(从最低有效位到最高有效位)并按区域设置的间隔插入分隔符,插入特定于区域设置的字符
  • 如果给出了
    '0'
    标志,则在符号字符(如果有)之后和第一个非零数字之前插入特定于语言环境的字符,直到字符串的长度等于请求的字段宽度
  • 如果该值为负数且给出了
    ”(“
    标志),则在前面加上一个
    ”(“
    ”\u0028“
    )并加上一个
    ”\u0029“
  • 如果值为负值(或浮点负零)且未给出
    '('
    标志),则会在前面加上一个
    '-'
    '\u002d'
  • 如果给出了
    '+'
    标志,且值为正或零(或浮点正零),则将在前面加上
    '+'
    '\u002b'
  • 如果值为NaN或正无穷大,则将分别输出文字字符串“NaN”或“infinity”。如果值为负无穷大,则输出将为“(infinity)”,如果
    ”(“
    标志已给出,否则输出将为“-infinity”。这些值未本地化


    当你必须“格式化”所有数字,你必须使用下面的数字格式扩展所有数字处理-System.out.println本身没有格式。好的,我有文本字段,我需要用户输入阿拉伯数字而不是拉丁数字。你知道@SmutjeSee的意思了吗?这个答案:它对我不起作用,我的程序中有很多数字输入y这个解决方案适用于输入过程。但是当从数据库加载数字时,它不起作用。你是否理解我@Blackishop必须有一种方法来强制java使用不同的编号系统,但我不知道它怎么没有成功?抱歉@Black
    System.out.printf("%d%n", i);