在字符串java中查找整数

时间:2013-12-08 18:26:17

标签: java

我想编写一个名为printDigit的方法,该方法应该找到字符串中有多少个整数。

对于15 an1234d 16 man,它应该返回2

这是我无望的代码:)

public String printDigit() {
  String input = "15 an1234d 16 man";

  int len = input.split(" ").length;
  return len + "";
}

返回3,不应将an1234d视为整数。

4 个答案:

答案 0 :(得分:3)

您可以使用正则表达式:

(^|\s)\d+(\s|$)

这意味着:任意数量的数字,以空格(或字符串的开头)开头,后跟空格(或字符串的结尾)。

这是一个演示Java中使用的片段。您可以运行demo of this code online here

public String printDigit() {
  String input = "15 an1234d 16 man";

  Pattern p = Pattern.compile("(^|\\s)\\d+(\\s|$)");
  Matcher m = p.matcher(input);
  int numberCount = 0;
  while(m.find()) {
      numberCount++;
  }

  return Integer.toString(numberCount);
}

输出:

Numbers: 2

更新:根据评论,使用parseInt()的替代方案:

在这种情况下使用parseInt()的注意事项是coding by Exception(这被认为是一种不好的做法),但如果您必须使用它,则下面是您可以使用的代码段。 Run it online here

public static String printDigit() {
  String input = "15 an1234d 16 man";
  String[] tokens = input.split(" ");
  int numberCount = 0;
  for(String s : tokens) {
      try {
          Integer.parseInt(s);
          numberCount++;
      } catch (Exception e) { /* couldnt parse as integer, do nothing */ }
  }

  return Integer.toString(numberCount);
}

输出:

Using parseInt(): 2

答案 1 :(得分:0)

您可以使用org.apache.commons.lang.math.NumberUtils中的方法NumberUtils.isDigits(String str)

  

检查字符串是否仅包含数字字符。

public String printDigit() {
  String input = "15 an1234d 16 man";
  int numb = 0;
  for(String str : input.split(" ")){
    if(NumberUtils.isDigits(str))
       numb++;
  }
  return Integer.toString(numb);
}

答案 2 :(得分:0)

如果NumberFormat

,您应该验证数组中的每个值

尝试添加该功能:

String[] data= input.split(" ");
int k=0;

for(String str:data){
    try  
    {  
        double d = Double.parseDouble(str);  
        k++;
    }  
    catch(NumberFormatException nfe)  
    {  
        System.out.println("Not a number");
    }  
}
return k;

答案 3 :(得分:0)

这是一个非正则表达式解决方案(不使用.split()),它也支持负整数。它适用于所有测试用例,例如"-5 -3s0 1 s-2 -3-"

public int countInt(String s) {
    int count = 0;
    boolean isInt = false;
    boolean start = true;
    boolean neg;
    for (char n : s.toCharArray()) {
        if (start && Character.isDigit(n))
            isInt = true;
        neg = (n == '-') ? start : false;
        start = (n == ' ') ? true : neg;
        if (isInt && start)
            ++count;
        if (!Character.isDigit(n))
            isInt = false;
    }
    return count + (isInt ? 1 : 0);
}

它返回一个int而不是一个字符串:

> countInt("15 an1234d 16 man")
2
> countInt("-5 -3s0 1 s-2 -3-")
2