说明: 给定一个字符串,确定它是否是整数。比如说 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”的布尔值而根本没有字符串(“”)
答案 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