我想编写一个名为printDigit
的方法,该方法应该找到字符串中有多少个整数。
对于15 an1234d 16 man
,它应该返回2
。
这是我无望的代码:)
public String printDigit() {
String input = "15 an1234d 16 man";
int len = input.split(" ").length;
return len + "";
}
返回3
,不应将an1234d
视为整数。
答案 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