试图确定字符串是否为整数

时间:2016-11-10 03:36:16

标签: java string integer

说明: 给定一个字符串,确定它是否是整数。比如说 string“123”是一个整数,但字符串“hello”不是。

如果字符串中的所有字符都是数字,则为整数。

如果是整数则返回true,否则返回false。

提示:有一个方法Character.isDigit()以char作为参数 并返回一个布尔值。

我到目前为止:

public boolean isInteger(String str) {
    if(Character.isDigit(str.charAt(0)) == 0) {
        return false;
    }
    for (int i = 0; i < str.length(); i++) {
        if(Character.isDigit(str.charAt(i))) {
            break;
        } else {
            return false;
        }
    }
    return true;
}

我遇到的问题是返回字符串“101”的布尔值而根本没有字符串(“”)

6 个答案:

答案 0 :(得分:6)

您可以使用正则表达式。

return str.matches("\\d+");
但是,

不适用于负数。

您也可以使用Integer.parseInt并抓住NumberFormatException并相应地返回true / false。

或者,你不应该破坏你找到的第一个数字,因为你需要检查所有字符,直到找到一个不是一个数字。同样,这不会捕获负数

public boolean isInteger(String str) {
    if(str == null || str.trim().isEmpty()) {
        return false;
    }
    for (int i = 0; i < str.length(); i++) {
        if(!Character.isDigit(str.charAt(i))) {
            return false;
        } 
    }
    return true;
}

就个人而言,选项2是最好的,但是你的指示似乎暗示你需要迭代字符值

答案 1 :(得分:2)

检查Integer.parseInt是否抛出异常。

try {
    Integer.parseInt(string);
} catch (NumberFormatException e) {
    return false;
}
return true;

答案 2 :(得分:2)

你很亲密,但逻辑混乱了。我现在和你一起经历。

if(Character.isDigit(str.charAt(0)) == 0) {
    return false;
}

如果试图测试,我不确定上述内容是什么。我看到您正在检查0索引是否为数字,但是您将其与0进行比较。即使这是正确编写的,也可以删除此语句,因为您将要遍历字符串。在阅读您的注释后,它似乎是为了检查null或空字符串。在这种情况下,您可能希望直接测试string

if(str == null || str.isEmpty())
    return false;
for (int i = 0; i < str.length(); i++) {
    if(Character.isDigit(str.charAt(i))) {
        break;
    }
     else {
        return false;
    }
}
return true;

上述break;并不符合我的想法。 break;将退出for循环,因此仅检查第一个character。我建议重写此if-else以取消else并取消您的isDigit方法。请参阅下面的代码。

for(int i = 0;i < str.length();i++){
    if(!Character.isDigit(str.charAt(i))
        return false;
}
return true;

如果return false不是数字,您只想character

答案 3 :(得分:2)

以上所有解决方案对我来说都是正确的,但我想再给这个问题一个解决方案。您也可以使用ASCII值进行检查:

private Boolean IsInteger(String str)
{
   int length = str.length(),c=0;
   if(length==0)
      return false;
   for(int i=0;i<length; i++)
   {
      c = (int)str.charAt(i)-48;
      if(!(c>=0 && c<10))
         return false;
   }
  return true;
}

我认为我的解决方案要好得多,因为每次迭代使用的库函数数量较少。

我没有检查负值,因为在您指定的问题中,如果所有字符都是数字,则字符串为Integer。如果要检查负数,可以通过在i == 0;。

中添加一个条件来实现

答案 4 :(得分:0)

我建议使用正则表达式来识别整数。

喜欢这个

public boolean isInteger(String str){
  Pattern p = Pattern.compile("[0-9]+");
  Matcher m = p.matcher(str);
  boolean b = m.matches();
  return b;
}

答案 5 :(得分:0)

在java中,您可以使用此正则表达式模式: 它将过滤负值或正值

m1 <- matrix(0, length(n), length(n))
m1[col(m1)==row(m1)] <- n
m1
#     [,1] [,2] [,3]
#[1,]    8    0    0
#[2,]    0    1    0
#[3,]    0    0    3