工作解决方案只检查String的整数?

时间:2015-07-07 20:19:53

标签: java regex string

我知道这个问题发布了很多,我检查了一些解决方案,但没有一个对我有用。

我想要检查TextField中的Stringinput是否有效。有效条目只是正整数,换句话说,所有都是> = 0和整数。

我尝试了一个像我这样的解决方案:

try {
    int input = Integer.valueOf(fieldwaitAfterAction.getText());
    if(input < 0)) {
        validInput = false; 
    } else { 
        validInput = true; 
    }
} catch(NumberFormatException e) {
    validInput = false;
}

适用于大多数错误模式,但如果我输入类似&#39; + 0&#39;或者&#39; -0&#39;它经过的实际情况并非如此。 所以我想要一个纯整数,在开头,中间或结尾没有任何字符。

这个问题的最佳解决方案是什么?

非常感谢!

7 个答案:

答案 0 :(得分:2)

public static boolean checkForDigits(final String toCheck){
    boolean flag = true;
    char[] toCheckArray = toCheck.toCharArray();
    for(int index=0; index < toCheckArray.length, flag==true; index++){
        if( ! ( ( (int)toCheckArray[index] > 47 ) && ( (int)toCheckArray[index] < 58 ) ) ){
            flag = false;
        }
    }
    return flag;
}

你去吧。如果所有都是数字,则返回true,否则返回false。 这是O(n)时间最坏的情况。 &LT; O(n)如果它检测到除数字之外的任何东西。

答案 1 :(得分:2)

我想你忘了把= to。如果我理解你的问题,这应该解决你的问题:

try{
                String input_string=fieldwaitAfterAction.getText()

                int input = Integer.valueOf(input_string);
                if(input <= 0)){
                    validInput = false; 

                }
                else{ validInput = true; }
                }
                catch(NumberFormatException e){
                    validInput = false;
}

答案 2 :(得分:2)

您可以使用正则表达式^\d+$检查输入是否只包含正数。

^ assert position at start of the string
\d+ match a digit [0-9]
    Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
$ assert position at end of the string

在Java代码中:

String[] arr = { "-123", "123a", "0", "123" };
String regex = "^\\d+$";
for (String str : arr) {
  Matcher matcher = Pattern.compile(regex).matcher(str);
  if (matcher.find())
    System.out.println("String " + str + " is a positive number.");
  else 
    System.out.println("String " + str + " is NOT a positive  number.");
}

打印

String -123 is NOT a positive number.
String 123a is NOT a positive number.
String 0 is a positive number.
String 123 is a positive number.

答案 3 :(得分:0)

对我而言,这始终是神奇的......

  try {
    Integer.parseInt(theStringToEval);
    // is this line is reach.. it is a int
  }
  catch (NumberFormatException e){
    // is the flow goes here
  }

但它允许带符号的整数...你可以创建一个方便的方法来隐藏这个实现细节并添加对那里标志的检查......

  public static boolean isPlainInteger (String string) {
    if (string.startsWith("-") || string.startsWith("+")) {
      return false;
    }

    try {
      Integer.parseInt(string);
      return true;
    }
    catch (NumberFormatException e){
      return false;
    }
  }

你也可以通过正则表达式实现它......也许这个可以帮助你。

 private static Pattern plainIntegerPattern = Pattern.compile("\\d+");
 public static boolean isPlainInteger (String string) {
    return plainIntegerPattern.matcher(string).matches();
 }

希望它有所帮助。

答案 4 :(得分:0)

Integer.ValueOf允许+ ans -个符号。按照javadoc

  

...字符串中的字符必须都是指定基数的数字(由java.lang.Character.digit(char,int)返回非负值确定),但第一个字符可能是ASCII减号' - '表示负值或ASCII加号'+'表示正值

因此,对于+后跟一个整数以及+0-0的任何值,您的代码都会中断,因为它们都会产生0。我将使用正则表达式给出解决方案。

String str = fieldwaitAfterAction.getText();
if (str == null) {
    retrun false;
}
String regex = "^(\\d+)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
    int val = Integer.valueOf(matcher.group(0));
    if (val > 0) {
        return true;
    }
}
retrun false;

通过这种方式,您可以使用088来处理^[^0](\\d+)$无法作为有效输入的情况。

答案 5 :(得分:0)

检查给定输入是否为整数,而不是有效的Java Integer(Integer.MAX_VALUE)。

&#

答案 6 :(得分:0)

您可以使用简单的正则表达式,例如“(^ 0 | [1-9] * \ d)$”。这允许您输入0或任何正整数。

cannot find symbol

请记住,使用像\ d +这样的正则表达式是行不通的,因为它会接受像“001243”这样的字符串