关于 java.text.NumberFormat 类的java文档中明确提到了以下内容: -
setParseIntegerOnly :仅影响解析,例如如果是,“3456.78” - >如果为false,则为3456(并且在索引6之后留下解析位置),“3456.78” - > 3456.78(并在索引8之后保留解析位置)这与格式无关。
以下是一个例子: -
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
为什么结果因语句位置的变化而受到影响???
答案 0 :(得分:3)
您将使用对完全不同的对象的引用替换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没有其他副作用):
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
为了使它脱离解析的上下文,假设我们有这个简单的类:
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());
和
Person person = new Person();
person.setName("Will be seen");
person = new Person();
System.out.println(person.getName());
答案 1 :(得分:1)
在第二个代码示例中,您有以下代码:
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(true);
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
执行以下步骤:
NumberFormat
numberFormat
变量
NumberFormat
返回的NumberFormat.getInstance()
实例分配给numberFormat
parseIntegerOnly
实例的NumberFormat
属性更改为true NumberFormat
返回的NumberFormat.getNumberInstance(Locale.CHINESE);
实例分配给numberFormat
因此,您可以在以后不使用的NumberFormat
实例上有效地设置该属性。