如何验证字符串是否为字符串而不是java中的整数?

时间:2014-09-10 03:00:03

标签: java validation try-catch

我在JTextArea中输入一个列表,当我按下一个按钮时,它会运行下面的方法。我需要检查str[i+1]str[i+2]String而不是int

public void readData(JTextArea input) {
    String[] str = input.getText().split("\n");
    for(int i =1; i< str.length; i= i+3) {
        try {
            Integer.parseInt(str[i]);
            simulator.add(new Process(Integer.parseInt(str[i]), str[i+1],str[i+2])); 
        } catch(NumberFormatException e) {
            System.out.println("Please enter an integer only " +
                                str[i] + " is not an integer");
        }
    }
}

5 个答案:

答案 0 :(得分:3)

您可以使用一个函数尝试将字符串解析为IntegerDouble,如果成功则返回true,或者返回false则在解析期间抛出异常。解析为Double应该足够了,因为所有整数值都是十进制值而没有.0

public static boolean isNumber(String s) {
    try {  
        Double.parseDouble(s);
        /* Use Integer.parseInt(s) instead, if
           you want to check if the String s
           is an Integer */
    } catch(NumberFormatException e) { // string is not a number
        return false; 
    }
    return true;
}

然后您可以说if(!isNumber(str))来检查String str是否不是数字。

或者,您可以通过交换isNumber()isNotNumber()语句使return false成为return true

如果您不想使用例外,则会有以下不同的方法。由于我们知道有效数字只能包含数字,小数点最多只能包含1个点,因此我们可以遍历字符串并检查每个字符:

  • 如果它不是数字而不是点,则返回false
  • 如果是点但已找到点,则返回false
  • 否则它是有效的数字字符,我们什么都不做

以下是一个示例函数:

public static boolean isNumber(String s) {
    int dotCount = 0;
    for(int i = 0; i < s.length(); i++) {
        if(s.charAt(i) != '.' && !Character.isDigit(s.charAt(i))) {
            return false;
        } else if(s.charAt(i) == '.') {
            if(dotCount == 1) {
                return false;
            }
            dotCount = 1;
        }
    }
    return true;
}

编辑:基于@MadProgrammer的建议:

一种更通用的方法,它接受以逗号分隔的值,例如1,35或数字字符串中的任意数量的空格,例如123 456 . 333

<强>方法

遍历字符串并检查每个字符:

  • 如果它不是数字,点,逗号或空格,则返回false
  • 如果是点或逗号,但已找到其中一个,则返回false
  • 否则它是有效的数字字符,我们什么都不做

所以代码看起来像是:

public static boolean isNumber(String s) {
    int separatorCount = 0; // count dots and commas
    char currChar;
    s.trim();  // remove trailing and leading whitespace
    for (int i = 0; i < s.length(); i++) {
        currChar = s.charAt(i);
        if (currChar != '.' && currChar != ',' && currChar != ' '
                && !Character.isDigit(currChar)) {
            return false;
        } else if (currChar == '.' || currChar == ',') {
            if (separatorCount == 1) {
                return false;
            }
            separatorCount = 1;
        }
    }
    return true;
}

另一种解决方案可以使用NumberFormat的{​​{1}}方法。但是,此方法仅检查字符串的开头(例如,对于parse()它将返回12.3.3),因此如果返回的字符串不等于输入字符串,则必须返回false如果抛出12.3

ParseException

注意所有方法都应该对输入public static boolean isNumber(String s) { try { String newVal = NumberFormat.getInstance().parse(s).toString(); if (!newVal.equals(s)) { return false; } } catch (ParseException e) { return false; } return true; } 进行检查if(s == null) { return false; }以阻止String

答案 1 :(得分:2)

您的规则很少,您没有指定,.之类的内容是否被视为数字的一部分(例如1, 000.01),同样,您不要定义是否允许值包含数值,但是......

你可以......

尝试使用Integer.parseInt解析每个值(或两者的串联),如果它们通过,则它们不是基于String(或文本)的值......

你可以......

使用String

之类的内容验证Character#isLetter中的每个字符,看它是否包含多个数字

你可以......

使用正则表达式确定该值是否包含除数字以外的其他内容。

答案 2 :(得分:2)

您可以尝试使用这个简单的正则表达式来检查字符串是否代表数字: -

String str = "12345";
System.out.println(str.matches("\\d+"));

答案 3 :(得分:0)

正则表达式似乎是最好的选择。这是一个正则表达式,它将用逗号分析浮点数和整数以及货币值。

 String numberRex = "^([\\d]*\\.*\\d*|[\\d,]*\\.*\\d*)$";
 "1234,455.43".matches(numberRex); // true

答案 4 :(得分:0)

这是一个简单的测试,断言至少有一个非数字字符:

if (str.matches(".*[^\\d.].*"))

正则表达式翻译为&#34;在输入的某处,有一个不是数字或点的字符&#34;