我正在尝试确定字符串是否包含正int。我的代码是:
public void isInt(String str) throws NotIntException{
String integer=str.replaceAll("\\d","");
System.out.println(integer);
if (!integer.equals("")){
throw new NotIntException("Wrong data type-check fields where an integer"+
" should be.");
}//end if
if (integer.equals("-")){
System.out.println(integer);
throw new NotIntException("Error-Can't have a negative count.");
}//end if
}//end method
我用字符串“-1”测试它,在replaceAll()之后,它应该变为“ - ”。这应该输入两个if语句。但它只进入第一个。我也尝试了==比较,以防万一,但它也没有用。对我来说奇怪的是,无论我是要实现第二个if语句的条件还是实现其否定[即!integer.equals(“ - ”)],程序仍然不会输入if .... / p>
谢谢,通常我的比较问题只是我遗漏了一些基本的东西,但我真的没有看到任何东西......
答案 0 :(得分:3)
因为你在第一次抛出异常,所以,你的第二次甚至不会被测试。
if (!integer.equals("")){
throw new NotIntException("Wrong data type-check fields where an integer"+
" should be.");
}
if (integer.equals("-")){
System.out.println(integer);
throw new NotIntException("Error-Can't have a negative count.");
}
如果您的代码输入第一个if
,则不会再执行。
但是,你为什么要用这种方法解决问题。
您可以轻松使用Integer.parseInt
来检查有效integer
。然后如果它是有效的,那么测试它是否less than 0
。它会更容易和可读。
答案 1 :(得分:1)
我的解决方案:
public static boolean isPositiveInt(String str) {
try {
int number = Integer.parseInt(str.trim());
return number >= 0;
} catch (NumberFormatException e) {
return false;
}
}
答案 2 :(得分:0)
如果你想简单地从String读取一个int,请使用Integer.parseInt(),尽管只有当你想看一个字符串“is”是一个int而不是一个int时才能使用它。
您可以使用Integer.parseInt()和循环策略的组合来查看它是否相当容易包含int,然后只检查它是否为正。
答案 3 :(得分:0)
你的方法过于复杂。我会保持简单:
if (integer.startsWith("-")) {
// it's a negative number
}
if (!integer.matches("^\\d+$")) {
// it's not all-numbers
}
忘记拨打replaceAll()