Netbeans 11.1 以 Windows 的默认语言打印数字
Netbeans 11.1 print numbers in Windows's default language
我仍在学习 Java 使用 Netbeans 11.1。
我的问题是,当我尝试 运行 一个应该显示数字的程序时,我得到的数字是用我的 Windows 默认语言阿拉伯语打印的。
这是我得到的结果:
我添加了行:-J-Duser.language=en -J-Duser.region=US
到 netbeans.conf 文件,但这并没有解决问题。
另一个解决方案建议使用 scanner.useLocale(Locale.ENGLISH);
但我不明白如何以及在哪里使用它。这是我的代码:
package lesson02;
public class ProvidedVariablesOneStatement {
public static void main(String[] args) {
String name = "Khalid"; name
int age = 24;
double gpa = 3.40;
System.out.printf("%s is %d years old. %s has %f gpa. \n", name, age, name, gpa);
}
}
name
用英文字母打印没有问题,但是age
和gpa
用阿拉伯数字打印。输出是:
Khalid is ٢٤ years old. Khalid has ٣٫٤٠٠٠٠٠ gpa.
要使用西方阿拉伯数字在输出中呈现数字,您只需在应用程序中适当地显式设置 Locale
。
这里是您的程序的一个稍微修改的版本,它首先使用东方阿拉伯数字显示信息,然后使用西方阿拉伯数字显示相同的信息。
package javaapplication18;
import java.text.NumberFormat;
import java.util.Locale;
public class JavaApplication18 {
public static void main(String[] args) {
String name = "Khalid";
int age = 24;
double gpa = 3.40;
Locale arLocale = new Locale("ar");
NumberFormat nf = NumberFormat.getInstance(arLocale);
System.out.println("Country: " + arLocale.getCountry() + ", Language: " + arLocale.getLanguage());
System.out.printf("%s is %s years old. %s has %s gpa. \n",
name, nf.format(age), name, nf.format(gpa));
Locale usLocale = new Locale("us", "EN");
nf = NumberFormat.getInstance(usLocale);
System.out.println("Country: " + usLocale.getCountry() + ", Language: " + usLocale.getLanguage());
System.out.printf("%s is %s years old. %s has %s gpa. \n",
name, nf.format(age), name, nf.format(gpa));
}
}
这是在 NetBeans 的 Output window 中显示的内容:
Country: , Language: ar
Khalid is ٢٤ years old. Khalid has ٣٫٤ gpa.
Country: EN, Language: us
Khalid is 24 years old. Khalid has 3.4 gpa.
备注:
- 有关区域设置的介绍,请参阅 Oracle Java Tutorial。
- 有关详细信息,请参阅 Locale and NumberFormat 的 Javadoc。
- 您应该也可以在 netbeans.conf 中设置语言环境,但我选择以编程方式进行,以显示动态切换的效果。
- NetBeans 中的 Output window 必须配置为使用一种字体来支持您用于输出的语言。显然这对你来说不是问题。
我仍在学习 Java 使用 Netbeans 11.1。
我的问题是,当我尝试 运行 一个应该显示数字的程序时,我得到的数字是用我的 Windows 默认语言阿拉伯语打印的。
这是我得到的结果:
我添加了行:-J-Duser.language=en -J-Duser.region=US
到 netbeans.conf 文件,但这并没有解决问题。
另一个解决方案建议使用 scanner.useLocale(Locale.ENGLISH);
但我不明白如何以及在哪里使用它。这是我的代码:
package lesson02;
public class ProvidedVariablesOneStatement {
public static void main(String[] args) {
String name = "Khalid"; name
int age = 24;
double gpa = 3.40;
System.out.printf("%s is %d years old. %s has %f gpa. \n", name, age, name, gpa);
}
}
name
用英文字母打印没有问题,但是age
和gpa
用阿拉伯数字打印。输出是:
Khalid is ٢٤ years old. Khalid has ٣٫٤٠٠٠٠٠ gpa.
要使用西方阿拉伯数字在输出中呈现数字,您只需在应用程序中适当地显式设置 Locale
。
这里是您的程序的一个稍微修改的版本,它首先使用东方阿拉伯数字显示信息,然后使用西方阿拉伯数字显示相同的信息。
package javaapplication18;
import java.text.NumberFormat;
import java.util.Locale;
public class JavaApplication18 {
public static void main(String[] args) {
String name = "Khalid";
int age = 24;
double gpa = 3.40;
Locale arLocale = new Locale("ar");
NumberFormat nf = NumberFormat.getInstance(arLocale);
System.out.println("Country: " + arLocale.getCountry() + ", Language: " + arLocale.getLanguage());
System.out.printf("%s is %s years old. %s has %s gpa. \n",
name, nf.format(age), name, nf.format(gpa));
Locale usLocale = new Locale("us", "EN");
nf = NumberFormat.getInstance(usLocale);
System.out.println("Country: " + usLocale.getCountry() + ", Language: " + usLocale.getLanguage());
System.out.printf("%s is %s years old. %s has %s gpa. \n",
name, nf.format(age), name, nf.format(gpa));
}
}
这是在 NetBeans 的 Output window 中显示的内容:
Country: , Language: ar
Khalid is ٢٤ years old. Khalid has ٣٫٤ gpa.
Country: EN, Language: us
Khalid is 24 years old. Khalid has 3.4 gpa.
备注:
- 有关区域设置的介绍,请参阅 Oracle Java Tutorial。
- 有关详细信息,请参阅 Locale and NumberFormat 的 Javadoc。
- 您应该也可以在 netbeans.conf 中设置语言环境,但我选择以编程方式进行,以显示动态切换的效果。
- NetBeans 中的 Output window 必须配置为使用一种字体来支持您用于输出的语言。显然这对你来说不是问题。