Java setParseIntegerOnly的意外行为(true)

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

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 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
    实例的
    parseIntegerOnly
    属性更改为true
  • 分配
    NumberFormat.getNumberInstance(Locale.CHINESE)返回的
    NumberFormat
    实例
    数字格式

因此,您可以在以后不使用的
NumberFormat
实例上有效地设置该属性。

在第二个代码示例中,您有以下代码:

NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(true);
numberFormat = NumberFormat.getNumberInstance(Locale.CHINESE);
这将执行以下步骤:

  • 声明名为
    NumberFormat
  • NumberFormat.getInstance()
    返回的
    NumberFormat
    实例分配给
    NumberFormat
  • 将该
    NumberFormat
    实例的
    parseIntegerOnly
    属性更改为true
  • 分配
    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)时,它工作得非常好。