好的,我迷路了。我需要弄清楚如何验证整数,但由于一些愚蠢的原因,我不能使用Try-Catch方法。我知道这是最简单的方法,所以互联网上的所有解决方案都在使用它。
我用Java写作。
这笔交易是这样的,我需要有人输入数字ID和字符串名称。如果两个输入中的任何一个无效,我必须告诉他们他们犯了错误。
有人能帮助我吗?
答案 0 :(得分:5)
如果我理解正确,您正在从标准输入中读取整数或字符串作为字符串,并且您要验证整数实际上是整数。也许您遇到的麻烦是Integer.parseInt()可用于将String转换为整数抛出NumberFormatException。听起来你的任务禁止使用异常处理(我是否理解正确),因此你不允许使用这个内置函数并且必须自己实现它。
确定。所以,由于这是作业,我不打算给你完整的答案,但这里是伪代码:
let result = 0 // accumulator for our result let radix = 10 // base 10 number let isneg = false // not negative as far as we are aware strip leading/trailing whitespace for the input string if the input begins with '+': remove the '+' otherwise, if the input begins with '-': remove the '-' set isneg to true for each character in the input string: if the character is not a digit: indicate failure otherwise: multiply result by the radix add the character, converted to a digit, to the result if isneg: negate the result report the result
这里的关键是每个数字的基数时间比直接数字右边的数字更重要,因此如果我们总是乘以基数从左到右扫描字符串,那么每个数字都有其正确的意义。现在,如果我弄错了,你实际上可以使用try-catch但是根本没有想出如何:
int result = 0; boolean done = false; while (!done){ String str = // read the input try{ result = Integer.parseInt(str); done = true; }catch(NumberFormatException the_input_string_isnt_an_integer){ // ask the user to try again } }
答案 1 :(得分:3)
不确定正在验证的String
是否应该检查内容是否只包含数字,还是实际可以在int
的有效范围内表示,解决此问题的一种方法是迭代String
的字符并检查字符是否仅由数字组成。
由于这似乎是家庭作业,这里有一点伪代码:
define isANumber(String input):
for (character in input):
if (character is not a number):
return false
return true
答案 2 :(得分:2)
我正在使用Java 1.6,这对我有用:
if (yourStringVariable.trim().matches("^\\d*$"))
然后你有一个正整数
答案 3 :(得分:1)
您可以使用java.util.Scanner
和hasNextInt()
来验证String
是否可以转换为int
而不会抛出异常。
作为一项额外功能,它可以跳过空格,并容忍额外的垃圾(您可以检查)。
String[] ss = {
"1000000000000000000",
" -300 ",
"3.14159",
"a dozen",
"99 bottles of beer",
};
for (String s : ss) {
System.out.println(new Scanner(s).hasNextInt());
} // prints false, true, false, false, true
另请参阅:How do I keep a scanner from throwing exceptions when the wrong type is entered?
答案 4 :(得分:0)
查看Scanner中的hasNext方法。请注意,每种类型都有方法(例如hasNextBigDecimal),而不仅仅是hasNext。
编辑:不,只有在扫描仪过早关闭的情况下,才会抛出无效输入。
答案 5 :(得分:0)
Pattern p = Pattern.compile("\\d{1,}");
Matcher m = p.matcher(inputStr);
boolean isNumber = false;
if (m.find()) {
isNumber = true;
}
答案 6 :(得分:0)
public static boolean IsNumeric(String s)
{
if (s == null)
return false;
if (s.length() == 0)
return false;
for (int i = 0; i < s.length(); i++)
{
if (!Character.isDigit(s.charAt(i)))
return false;
}
return true;
}