如何编写一段Java代码来检查字符串中的任何字符是否可以转换为0到9之间的整数?

如何编写一段Java代码来检查字符串中的任何字符是否可以转换为0到9之间的整数?,java,string,integer,parsing-error,Java,String,Integer,Parsing Error,我如何编写一段Java代码来检查字符串是否可转换为整数,即它的任何字符是否可转换为0到9之间的整数?我想到了这样的事情: String s = "..."; for (int i = 0; i < s.length(); i++) { int h = Integer.parseInt(s.substring(i, i + 1)); if (h < 0 || h > 9) throw new IntegerFormatException();

我如何编写一段Java代码来检查字符串是否可转换为整数,即它的任何字符是否可转换为0到9之间的整数?我想到了这样的事情:

String s = "...";

for (int i = 0; i < s.length(); i++)

{

    int h = Integer.parseInt(s.substring(i, i + 1));
    if (h < 0 || h > 9)
        throw new IntegerFormatException();   
}

catch (IntegerFormatException e)

{

    System.out.println("This is not an integer");

}
但是如果我尝试使用代码,比如说,“8&35”作为字符串,我不会得到我的消息“这不是一个整数”,但我会得到和IDE自动红墨水消息

线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“&”

Java结果:1


我的代码错了吗?如果是,我如何修复它?非常感谢您的回答。

这是因为
Integer.parseInt
将抛出
NumberFormatException
异常,如果您尝试解析非int的内容,但在try/catch块中未捕获该内容。您可以在catch块中捕获它,或者在尝试解析(或者,如注释中所指出的,
character.isDigit()
)之前,使用正则表达式检查该位置的字符


而且,不需要看一个数字是小于0还是大于9——一个数字怎么可能不是0-9范围内的整数呢?这并不能真正告诉您该字符是否为有效的
int
,因为除非您比较ASCII值,否则谈论&是否大于9是没有意义的,例如。

已经存在运行时异常,请使用它

String s = "8&35";
try {
    int result = Integer.parseInt(s);
    System.out.println("This is parsable: " + result);
} catch (NumberFormatException e) {
    System.err.println("s is  NOT parsable....");
}
Integer.parseInt(s.substring(i,i+1))自身引发异常。
特别是,它抛出了
java.lang.NumberFormatException:
,您的捕获没有捕获到它

如果您确实需要使用您的异常(已经有一个异常,为什么不使用该异常?),请使用以下选项:

public static void main(String[] args) {
    String s = "1234/&&56";

    try{
        for (int i = 0; i < s.length(); i++)

        {

            char c = s.charAt(i);
            int h = c-'0';
            
            if (h < 0 || h > 9)
                throw new IntegerFormatException();   
        }



    }catch(IntegerFormatException e)
    {

        System.out.println("This is not an integer");

    }
}
publicstaticvoidmain(字符串[]args){
字符串s=“1234/&&56”;
试一试{
对于(int i=0;i9)
抛出新的intePerformateException();
}
}捕获(集成执行异常e)
{
System.out.println(“这不是一个整数”);
}
}

请注意,如果您试图解析
有符号的
数字,则还应包括对第一个字符(可能是
-
符号)的检查。

我将使用正则表达式:

if(s.matches("[0-9]"))
{
    //it's an Integer, 
    //execute logic
}

您应该参考
Integer.parseInt(字符串s)
方法的文档。此方法的完整标题为
public static int valueOf(String s)throws NumberFormatException
,文档说明当字符串不包含可解析整数时,将抛出
NumberFormatException

为了获得您所描述的功能,您应该考虑将单个字符传递到函数中总是会导致一个整数从0到9(包含),如果字符是可分配给int的,那么,if if语句可能是不必要的。要使实现正常工作,您应该捕获

NumberFormatException
,并使用它来确定字符的解析是否正确

此外,为了简化代码,还可以使用
s.charAt(i)
方法,而不是
s.substring(i,i+1)
。您可能还想查看regex以获得您解释的行为。

试试这个

String regex = "^-?[0-9]+$";
if (s.matches(regex) {
    // it's a number  
} else {
   // not a number
}

您可以使用正则表达式代替循环。这将起作用,并将抛出一个空字符串的
integerformateexception

String s = "...";

if (!s.matches("[0-9]+")) {
    throw new IntegerFormatException();
}

它不会覆盖
Integer
类型容量溢出-我的意思是
Integer.MAX\u值上面有一个很大的数字。不确定您是否需要它。

您可以使用字符类isdigit api或其他api来测试它是否为数字

String s = "1234/&&56";
         for(int i=0;i<s.length();i++){
             char ch=s.charAt(i);
             if((Character.isDigit(ch))){
                 System.out.println(ch);
             }
         }
String s=“1234/&&56”;


对于(int i=0;i函数chr($i)返回一个单字符字符串,该字符串包含相当于$i的字符,其中$i是介于0和255之间的整数。

1。
s.substring(i,i+1)
->2。您可以使用(或者写一个你自己的方法来执行类似的检查,假设你知道什么值数字被编码成字符)我非常感谢你们每一个人。你们所有的答案都是清晰的和决定性的。我会有用的。再次感谢你们。负整数呢?@svasa
^-|[0-9]
就像regex会做的那样。测试@svasa如果OP一次只看一个字符,负号将被忽略。我非常感谢大家。你们所有的答案都很清楚和果断。我会使用它们的。再次感谢大家。这与我的答案有什么不同吗?@EJoshuaS我想不是,但我是w在你发布你的回复之前写下我的回复,所以我没有看到你的回复。我非常感谢你们每一个人。你们所有的答案都是明确的和决定性的。我会用它们来获利。再次感谢你们。值得注意的是,intePerformateException不能出现。你是什么意思?如果是一个整数,它不可能小于0或gr食量大于9。(如果只看一个字符,也不能是负数).哦,是的,上面的代码只是说明了为什么没有提出
integratePerformateException
。这不是一个字符串转换为整数的声音检查。我非常感谢你们每一个人。你们所有的答案都很清楚和明确。我将使用它们。再次感谢你们。我非常感谢你们每一个人。你们所有的答案都是正确的再次感谢大家。我非常感谢你们所有人。你们所有的答案都是明确的和决定性的。我将有益地使用它们。再次感谢你们所有人。我非常感谢你们所有人。你们所有的答案都是明确的和决定性的。我将有益地使用它们。再次感谢你们所有人。我非常感谢你们所有人你的答案很清楚
String s = "...";

if (!s.matches("[0-9]+")) {
    throw new IntegerFormatException();
}
String s = "1234/&&56";
         for(int i=0;i<s.length();i++){
             char ch=s.charAt(i);
             if((Character.isDigit(ch))){
                 System.out.println(ch);
             }
         }