java中判断字符是不是数字问题?原题: 
public class HH { 
public static boolean isNumberic(String str) { 
写函数。。 System.out.println(isNumberic("123")); 
System.out.println(isNumberic("-123.23")); 
System.out.println(isNumberic("0x123")); 
System.out.println(isNumberic("12acb3")); 
System.out.println(isNumberic("-aa123")); 


得出结果要是: 
ture 
ture 
ture 
false 
false 我做了两次都有一点问题: 
第一次: 
public class HH { 
public static boolean isNumberic(String str) { if (str == null) { 
return false; 

int sz = str.length(); 
for (int i = 0; i < sz; i++) { 
if (Character.isDigit(str.charAt(i)) == false) { 
return false; 


return true; } 
public static void main(String[] args) { 
System.out.println(isNumberic("123")); 
System.out.println(isNumberic("-123.23")); 
System.out.println(isNumberic("0x123")); 
System.out.println(isNumberic("12acb3")); 
System.out.println(isNumberic("-aa123")); 


只能第一个ture,其他的是false了 第二次: 
public class HH { 
public static boolean isNumberic(String num) { 
try { 
Double.parseDouble(num); 
return true; 

catch (NumberFormatException e) { 
return false; 


public static void main(String[] args) { 
System.out.println(isNumberic("123")); 
System.out.println(isNumberic("-123.23")); 
System.out.println(isNumberic("0x123")); 
System.out.println(isNumberic("12acb3")); 
System.out.println(isNumberic("-aa123")); 


第3个又判断不准了。。我知道 我的方法有很多缺陷,就是0x123不好判断啊。。高手指点,,不胜感激!!

解决方案 »

  1.   

    先说你第一次.就只有"123"里面没有含其他的字符 全是数字.所以是true.后面没一个字符串里面都含有非数字字符,所以结果当然全是false;
      

  2.   


    让系统给你做嘛不就行了
    public static boolean isNumberic(String str){ 
          int i =0;
          float f = 0;
          try{
             if(str.indexOf(.) > 0){
                f = Float.parseFloat(str);
             }
             if(str.indexOf(0x) > 0)){
                i = Integer.parseInt(str,16);
             }
             if(str.charAt(0)==0&& str.charAt(1)!= x){
                i = Integer.parseInt(str,8);   
             }
             i = Integer.parseInt(str);
            
          }catch(NumberNotFormatException e){
             return false;
          }
           return true;
    }
      

  3.   

    上面的indexOf()里面少写了"",不知道上面的方法行不行,没测试过~ 自己试试吧
      

  4.   

    看看这个吧
    public class Number{
    static boolean isNumberic(String num) throws NumberFormatException{
    try{
    Double.parseDouble(num);
    }catch(NumberFormatException e){
    return false;
    }
    return true;
    }
    public static void main(String[] args){
    System.out.println(isNumberic("123"));
    System.out.println(isNumberic("-123.45"));
    System.out.println(isNumberic("ox12"));
    System.out.println(isNumberic("1abc"));
    System.out.println(isNumberic("-1a33"));
    }
    }
      

  5.   

    用正则表达式吧,方便一些。public class Test {    
        public static void main(String[] args) {
            System.out.println(isNumberic( "123.3"));   
            System.out.println(isNumberic( "-123.23"));   
            System.out.println(isNumberic( "-0x123"));   
            System.out.println(isNumberic( "12acb3"));   
            System.out.println(isNumberic( "-aa123"));
            System.out.println(isNumberic( "+-+-017"));
            System.out.println(+-+011);
        }    
        public static boolean isNumberic(String str) {
            return str.matches("([+-]?|(-\\+)*[-]?|(\\+-)*[+]?)(([1-9]\\d*(\\.\\d*)*)|(0[xX]\\p{XDigit}+)|(0[0-7]+))");
        }
    }
      

  6.   

    ([+-]?|(-\\+)*[-]?|(\\+-)*[+]?)(([1-9]\\d*(\\.\\d*)*)|(0[xX]\\p{XDigit}+)|(0[0-7]+))"不懂
      

  7.   

    /*
    public static boolean isNumberic(String str) {
            return str.matches("([+-]?|(-\\+)*[-]?|(\\+-)*[+]?)(([1-9]\\d*(\\.\\d*)*)|(0[xX]\\p{XDigit}+)|(0[0-7]+))");
        }
    */
    5楼的什么意思?
      

  8.   

    [+-]?|(-\\+)*[-]?|(\\+-)*[+]?)(([1-9]\\d*(\\.\\d*)*)|(0[xX]\\p{XDigit}+)|(0[0-7]+)
    不懂的去看
    http://blog.csdn.net/mfkidt/archive/2006/10/13/1333364.aspx