将字符串转换为整数。如果字符串为空,则将整数设置为0。

24

我有一个函数,用于在sqlite中保存Android数据,但我必须将String数据转换为Integer

每当Stringnull时,我希望将其保存为0

以下是我的代码,在值为null时会失败

 int block_id = Integer.parseInt(jsonarray.getJSONObject(i).getString("block_id"));

block_id以上的内容被转换为Integer类型。

这是我决定要做的事情,但仍无法将字符串值转换为null时的0

int block_id = Converttoint(jsonarray.getJSONObject(i).getString("block_id"));

然后函数convertToInt

 public static Integer convertToInt(String str) {
    int n=0;
  if(str != null) {
      n = Integer.parseInt(str);
  }
    return n;
}

我该如何修改它,以使其正常工作?


4
请提供一个 [mcve]。我怀疑你的字符串不是 null,而是空的。 - Tunaki
4
这段代码看起来应该是可行的,虽然我会返回int而不是Integer,并将你的方法名更改为convertToInt(或者parseIntOrNull)。 - Jon Skeet
在你检查字符串不为null之后,我还会检查字符串是否仅包含数字:str.matches("[0-9]+");。或者你可以捕获解析异常。 - CloudPotato
JSONObject jObj = jsonarray.getJSONObject(i); int block_id = TextUtils.isEmpty(jObj.getString("block_id"))?0:jObj.getInt("block_id") ; 请尝试这个。 - Zala Janaksinh
12个回答

1
注意..你也可以这样写
 public static Integer convertToInt(String str) {
    int n=0;
    if(str != null && str.length()>0) {
        n = Integer.parseInt(str);
    }
    return n;
}

但是,try/catch方法更加有效和简单,如果一个字母进入了字符串中,也不会导致系统退出(值得一提)。
另外,需要注意的是,像这样写相同的等式:
if(str != null & str.length()>0) {}

或者像这样:
if(str.length()>0 && str != null) {}

可以导致操作失败,因为它会尝试计算字符串的数量,即使它为空也是如此。
希望我回答了你所有的问题。

-1
你的函数应该只在参数为空的情况下使用空字符串而不是null时才能正常工作。 如果参数是空的字符串,Integer.parseInt会抛出一个NumberFormatException而不是返回0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接