如何在字符串中是否有数字?

时间:2015-09-05 18:05:02

标签: java

import java.util.*;

class Dis {

    static boolean Digitinstring(String s) {
        boolean result = false;
        int i, j;
        char[] ch = s.toCharArray();
        int x = ch.length;
        for (j = 0; j < x; j++) {

            for (i = 0; i <= 9; i++) {

                if (ch[j] == i) {
                    System.out.println("True");
                    result = true;
                } else {
                    result = false;
                }

            }
        }
        return result;
    }

    public static void main(String args[]) {
        System.out.println("Enter the string");
        Scanner ob = new Scanner(System.in);
        String s = ob.nextLine();
        System.out.println(Digitinstring(s));
    }
}

此代码始终给出答案false。 if条件不起作用。 我该怎么做才能使它正常工作?

6 个答案:

答案 0 :(得分:4)

您的代码失败,因为'3'等于3.字符3,即您的ch [j]将永远不会等于实际的整数,因为它们具有不同的类型。如果你想要这个,你应该用这个替换你的if条件:

Character.getNumericValue(ch[j]) == i;

更简单的方法是简单地使用

Character.isDigit(s.charAt(j)); 

你的整个方法看起来像这样:

public static boolean digitInString(String s){


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

        if(Character.isDigit(s.charAt(i))){
            return true;
        }


    }
    return false; 

}

答案 1 :(得分:2)

您可以使用正则表达式来获得更紧凑的代码。正则表达式适用于您的场景,它正在寻找字符串中的特定模式。在您的Digitinstring中,您可以执行以下操作:

return s.matches(".*\\d.*");

如果您的字符串具有任意数量的字符(。*),后跟数字(\\ d)后跟任意数量的字符(。*),则返回true。任意数量的字符都可以包含0。

Swailem95的帖子很好地解释了为什么你当前的实现没有返回预期的结果。

答案 2 :(得分:1)

几乎没有问题。首先是你的else块。请记住,如果if(){1}else{2}必须始终执行两个块中的一个,则可以是{1}{2}
这意味着您的result仅取决于最后一次测试,换言之,仅取决于最后一个字符 要解决此问题,请移除else阻止,只有当您的测试找到数字时才允许result存储true

第二个问题是,在(ch[j] == i)您要比较charint。所以你最终会得到像什么这样的东西 if ('2' == 2)在Java中为false,因为'2'的int表示是index in Unicode Table,即50。

因此,当您看到'2'==2之类的条件与50==2相同时,这是错误的。

要生成包含数字的所有字符,您只需在此代码中编写for (char digit = '0'; digit<='9'; digit++)

static boolean DigitInString(String s) {
    for (char ch : s.toCharArray()) {
        for (char digit = '0'; ch <= '9'; ch++) {
            if (ch == digit) {
                System.out.println("True");
                return true;
            } 
        }
    }
    return false;
}

您还可以提高代码的可读性并替换此嵌套循环

        for (char digit = '0'; ch <= '9'; ch++) {
            if (ch == digit) {
                System.out.println("True");
                return true;
            } 
        }

        if (Character.isDigit(ch)){
            System.out.println("True");
            return true;
        }

此方法将检查字符是否在Unidoce Table中为数字字符指定的范围内。

答案 3 :(得分:1)

/* Note: 48 to 57 is ascii values of 0,1, 2,...9 respectively
   code is made more readable ascii values are not used now 
 */
package com;

import java.util.Scanner;

public class Dis {
    public static void main(String[] args) {
        System.out.println("Enter the string");
        Scanner ob = new Scanner(System.in);
        String s = ob.nextLine();
        System.out.println(Digitinstring(s));
        ob.close();
    }

    private static boolean Digitinstring(String s) {
        boolean result = false;
        for (int j = 0; j < s.length(); j++) {
            if(s.charAt(j)>='0' && s.charAt(j)<='9')
           {
               result=true;
               break;
           }
        }
        return result;
    }
}

答案 4 :(得分:0)

您遇到问题:

for (i = 0; i <= 9; i++) {
    if (ch[j] == i) {
         System.out.println("True");
         result = true;
    } else {
         result = false;
    }
}

ch [j]是一个字符,我是一个数字,所以字符'0'的数字值为46(如果我没记错的话),所以你可以通过在i中添加'0'来纠正这种情况。如果声明

if (ch[j] == i+'0') {

或修改for循环

for (i = '0'; i <= '9'; i++) {

请注意,在这种情况下,0是一个字符。

答案 5 :(得分:0)

  

if(ch [j] == i)

请更正上述条件以比较相同对象类型,您目前使用的是不同类型,这是永远不会发生的。或者使用Character Class中的内置isDigit方法。