我们可以先通过正则把数值提取出来,然后再逐个分析
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class todo {
/**
* 高级一点的 Stirng 转 int
*
* @param string
* 含有整数的字符串
*
* @return 分析后的结果,若失败,返回 0
*/
private static int getIntFromString(String string) {
int result = 0;
try {
result = Integer.parseInt(string);
} catch (NumberFormatException e) {
int endIndex = 0;
for (int i = 0; i < string.length(); i++) {
if (0x30 <= string.charAt(i) && 0x39 >= string.charAt(i)) {
endIndex++;
} else {
break;
}
}
if (0 != endIndex) {
result = Integer.parseInt(string.substring(0, endIndex));
} else {
result = 0;
}
}
return result;
}
public static void main(String[] args) {
// [Neo] 获取标准输入
Scanner scanner = new Scanner(System.in);
String dummy = null;
while(true)
{
try{
dummy = scanner.nextLine();
// [Neo] 数值的正则
Pattern pattern = Pattern.compile("\d+");
Matcher matcher = pattern.matcher(dummy);
while (matcher.find()) {
// [Neo] 调用 String 转 int 方法
System.out.println("" + getIntFromString(matcher.group()));
}
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
}
输入的内容可以是任何数据,含有整数的字符都会被提取出来的
比如:2012 neo5simple 11 55
运行结果为
2012
5
11
55
更新:
楼主说要判断什么时候用户的输入结束,这个地方不是由程序来控制的么?
我的代码上采用默认的 回车 来作为每次的结束,接收到 回车 符号后就会交由程序计算
如果想自己来做决定,那就去做用户需求,用户说每输入 5 个数做一次输出,那咱们就按他们说的做,如果用户说每次用 回车 作为结尾,那我们就用 回车 作为终止,然后开始计算。
这一点上,我认为用户的需求分析是关键,而不应该是凭空去想如何结束。