2013-05-31 81 views

回答

10

您可以使用正则表达式:yourString.matches("\\d+")

\\d意味着一个数字0-9,+意味着一个或多个,并结合\\d+等于一个或多个数字:)

+0

非常感谢你 – Ted

+0

欢迎您:) – Pshemo

4

使用正则表达式:

string.matches("\\d*"); 

"\d*"装置 “A位(0-9)零或更多次”。或者,您可以将“*”替换为“+”以表示“一次或多次”。

+0

谢谢你的解释,也是 – Ted

1

您可以遍历字符串并检查每个字符(如果性能是考虑,可能比使用正则表达式更有效)。

boolean isAllDigit(String s) { 
    for (int i = 0; i < s.length(); i++) { 
     if (s.charAt(i) < '0' || s.charAt(i) > '9') { 
     return false; 
     } 
    } 

    return true; 
} 
+1

对不起如果我看起来很烦人,但是如何正则表达式更慢然后遍历所有它呢?我是一个初学者,只是问它背后的理论 – Ted

+1

我不确定在Java中如何实现正则表达式,但通常的做法是将正则表达式编译为有限自动机,然后运行自动机在字符串看它是否匹配。在这种情况下,自动机非常简单。但是,无论哪种情况,您都会迭代整个字符串。所以,使用正则表达式的代价大概是:'build automata'+'iterate'。上面的代码的代价只是'迭代'。所以,如果你有200亿字符串,上面的代码会更快。 – npr

+0

如果你只有一个非常长的字符串,我认为这不会有什么不同,因为不管字符串的长度如何,只建立一次自动机,它的大小由正则表达式决定。 – npr

1

为什么不把它放在try/catch中呢?

String number="a123.2"; 
    try { 
     Double.parseDouble(number); 
     System.out.println("It's a number"); 
    } catch (Exception e) { 
     System.out.println("This is not a number!"); 
    } 
3

org.apache.commons.lang.StringUtils.isNumeric(String)验证输入字符串中的所有字符都是数字。

它的实现(如果你不希望第三方的依赖也):

int sz = str.length(); 
    for (int i = 0; i < sz; i++) { 
     if (Character.isDigit(str.charAt(i)) == false) { 
      return false; 
     } 
    } 
    return true; 
相关问题