Java setParseIntegerOnly的意外行为(true)
java文档中明确提到了关于类的以下内容:- setParseIntegerOnly:仅影响解析,例如,如果为true,“3456.78”->3456(并在索引6之后离开解析位置);如果为false,“3456.78”->3456.78(并在索引8之后离开解析位置)这与格式无关。 以下是一个例子:-Java setParseIntegerOnly的意外行为(true),java,Java,java文档中明确提到了关于类的以下内容:- setParseIntegerOnly:仅影响解析,例如,如果为true,“3456.78”->3456(并在索引6之后离开解析位置);如果为false,“3456.78”->3456.78(并在索引8之后离开解析位置)这与格式无关。 以下是一个例子:- import java.text.NumberFormat; import java.text.ParseException; import java.util.Locale; public cl
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class NFTest {
public static void main(String args[]) throws Exception {
NumberFormat numberFormat = NumberFormat.getInstance();
//statement which is not going well
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
numberFormat.setParseIntegerOnly(true);
String usersNumber = "1976.0826" ;
try{
Number num = numberFormat.parse(usersNumber) ;
System.out.println(num);
}
catch(ParseException pe){
System.out.println(pe);
}
}
}
o/p:-
1976
现在,这里再次使用相同的示例,但有一点变化:-
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class NFTest {
public static void main(String args[]) throws Exception {
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(true);
//result is getting affected, if I change the
//position of following statement
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
String usersNumber = "1976.0826" ;
try{
Number num = numberFormat.parse(usersNumber) ;
System.out.println(num);
}
catch(ParseException pe){
System.out.println(pe);
}
}
}
o/p:-
1976.0826
为什么结果会因为语句位置的变化而受到影响???您正在用对完全不同对象的引用替换numberFormat的值。。。因此,
setParseIntegerOnly
调用没有任何效果
此代码:
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(true);
//result is getting effected, if i change the
//position of following statement
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
等效于(假设getInstance和setParseIntegerOnly没有其他副作用):
为了脱离解析上下文,假设我们有一个简单的类:
public class Person
{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
你的问题实际上是在问以下两者之间的区别:
Person person = new Person();
person = new Person();
person.setName("Will be seen");
System.out.println(person.getName());
及
您正在用对完全不同对象的引用替换numberFormat的值。。。因此,
setParseIntegerOnly
调用没有任何效果
此代码:
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(true);
//result is getting effected, if i change the
//position of following statement
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
等效于(假设getInstance和setParseIntegerOnly没有其他副作用):
为了脱离解析上下文,假设我们有一个简单的类:
public class Person
{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
你的问题实际上是在问以下两者之间的区别:
Person person = new Person();
person = new Person();
person.setName("Will be seen");
System.out.println(person.getName());
及
在第二个代码示例中,您有以下代码:
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(true);
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
这将执行以下步骤:
- 声明名为
NumberFormat
- 将
返回的NumberFormat.getInstance()
实例分配给NumberFormat
NumberFormat
- 将该
实例的NumberFormat
属性更改为trueparseIntegerOnly
- 分配
NumberFormat.getNumberInstance(Locale.CHINESE)返回的
实例代码>至NumberFormat
数字格式
因此,您可以在以后不使用的
NumberFormat
实例上有效地设置该属性。在第二个代码示例中,您有以下代码:
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(true);
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
这将执行以下步骤:
- 声明名为
NumberFormat
- 将
返回的NumberFormat.getInstance()
实例分配给NumberFormat
NumberFormat
- 将该
实例的NumberFormat
属性更改为trueparseIntegerOnly
- 分配
NumberFormat.getNumberInstance(Locale.CHINESE)返回的
实例代码>至NumberFormat
数字格式
因此,您可以在以后不使用的
NumberFormat
实例上有效地设置该属性。如果我只使用NumberFormat NumberFormat=NumberFormat.getInstance();numberFormat.setParseIntegerOnly(真);工作不正常,例如numberFormat.parse(“1976.0826”);打印19760826,。。我用Java8和java进行了测试eclipse@EdyLuisreyAguirre:这也取决于您所在的地区。如果您所在的区域设置中,
可以用作千位分隔符,这就可以解释问题。如果这没有帮助,我建议你问一个新的问题,并详细说明。谢谢,你是对的,问题是由区域设置引起的,因为当我设置NumberFormat.getInstance(Locale.US)时,它工作得非常好。如果我只使用NumberFormat NumberFormat=NumberFormat.getInstance();numberFormat.setParseIntegerOnly(真);工作不正常,例如numberFormat.parse(“1976.0826”);打印19760826,。。我用Java8和java进行了测试eclipse@EdyLuisreyAguirre:这也取决于您所在的地区。如果您所在的区域设置中,
可以用作千位分隔符,这就可以解释问题。如果这没有帮助,我建议你问一个新的问题,并详细说明。谢谢,你是对的,这个问题是由区域设置引起的,因为当我设置NumberFormat.getInstance(Locale.US)时,它工作得非常好。