我有一个定义为String的变量,
String totalweight;
这可能取值'0.00','0.12'......任何十分位数,偶尔会有'不适用'。
现在我必须以这样的方式格式化这个字段,如果它不是一个例如:'n / a',那么就像下面那样格式化它们。
public String getFmtWeight()
{
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern("#0.00");
if(Double.isNaN(Double.parseDouble(totalweight)))
return totalweight;
else
return df.format(Double.parseDouble(totalweight));
// if(!totalweight.equals("n/a"))
// return df.format(Double.parseDouble(totalweight));
// else
// return "n/a";
}
当n / a被强制转换为double throws异常时,这会中断。但评论部分可行。但我不想使用它,因为'n / a'将来可能会因不同的字符串而改变。还有其他方法可以实现同样的目标吗?
答案 0 :(得分:0)
一种解决方案是使用try-catch
来解释在双重失败时解析字符串的问题,例如:
public String getFmtWeight()
{
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern("#0.00");
try {
if(Double.isNaN(Double.parseDouble(totalweight)))
return totalweight;
else
return df.format(Double.parseDouble(totalweight));
} catch ( NumberFormatException ex ) {
/* thrown when the String can't be parsed as a double */
return totalweight; // if 'totalweight' is the String you want to parse
}
}
这将处理使用parseDouble
无法解析为double的任何字符串。
答案 1 :(得分:0)
您可以使用正则表达式进行验证。
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern("#0.00");
String totalweight = "n/a";
String pattern = "[0-9]*.[0-9]*";
boolean isNan = Pattern.matches(pattern, totalweight);
if(!isNan) {
System.out.println(totalweight);
}
else {
System.out.println(df.format(Double.parseDouble(totalweight)));
}
您可以尝试此代码