Java-java 怎么读入不确定个数的int类型的数字

Java-java 怎么读入不确定个数的int类型的数字

想挽留 发布于 2017-04-01 字数 176 浏览 1249 回复 3

大牛们啊,求助!

java 怎么读入不确定个数的int类型的数字
比如用户随意输入n个数字,n的值不确定,怎么判断输入的结束,
或者给个程序参考下啊。
谢谢啦!

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜柠檬 2017-10-25 3 楼

我们可以先通过正则把数值提取出来,然后再逐个分析

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 个数做一次输出,那咱们就按他们说的做,如果用户说每次用 回车 作为结尾,那我们就用 回车 作为终止,然后开始计算。

这一点上,我认为用户的需求分析是关键,而不应该是凭空去想如何结束。

想挽留 2017-07-29 2 楼

是这样,一般你做一个 和用户 交互的程序, 你的程序有责任 告诉用户 如何退出。

 @Test
public void test8() {
Scanner sc=new Scanner(System.in);
String str;
System.out.println("Enter an integer; input 'exit' to end");
while("exit".equalsIgnoreCase(str=sc.nextLine())){
try{
int i=Integer.parseInt(str);
System.out.println("You just input a "+i);
//doSomething
System.out.println("Input another integer; input 'exit' to end");
}catch(NumberFormatException e){
System.out.println("not a number, try again.");
}
}
}

想挽留 2017-06-21 1 楼

很简单的一个方法就是调用System.in.read()方法,此方法以换行符(Enter)表示结束,把用户输入的信息保存到一个字节数组中,然后通过这个字节数组构造字符串。

public class SystemIn {

public static void main(String[] args) {
// 定义一个字节数组
byte[] b = new byte[100];
try {
// 将用户的输入保存到字节数组b中,以换行符表示结束
System.in.read(b);
} catch (IOException e) {
e.printStackTrace();
}
// 输出用户的输入
System.out.println(new String(b));
// 如果想得到的结果是整形值得话,可以这样转换
int num = Integer.parseInt(new String(b));
}

}