使用扫描仪读取多个位

时间:2019-05-01 14:38:52

标签: java java.util.scanner

我有一个简单的代码,可以读取用户输入的值:

Scanner scanner = new Scanner(System.in);
System.out.printf("Enter with values: ");

String symbol = scanner.next();
System.out.println(symbol);
// But now I only have a single value

但是我想获得所有输入的值,而不仅仅是一些。输入可能是

01
// or
01011
// or
000000000000000000000001110

用户可以输入所需的任何值。我想要一个包含每个单独输入位的数组。

示例数组:

String[] entries;
entries [0] = "0";
entries [1] = "1";
...

任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:3)

说明

使用Scanner#nextLinedocumentation来读取完整的输入,而不仅仅是单个令牌。然后在生成的String#toCharArray上调用Stringdocumentation)。然后,您将得到一个char[],其中包含所有字符。

String input = scanner.nextLine();
char[] values = input.toCharArray();

验证并int[]

如果您想验证输入(仅01)并且可能更喜欢使用int[]而不是char[],则只需遍历单个字符,验证并收集它们。

在这种情况下,您应该首选String#charAtdocumentation)以避免由String#toCharArray引起的额外副本。

String input = scanner.nextLine();
int[] values = new int[input.length()];
for (int i = 0; i < input.length(); i++) {
    char c = input.charAt(i);
    if (c != '0' && c != '1') {
        throw new IllegalArgumentException("Only 1 and 0 are allowed!");
    }
    values[i] = (int) c;
}

答案 1 :(得分:2)

要通过扫描仪获得连续的输入,可以使用scanner.hasNext(),然后将其存储在某个数组或列表中。以后,根据某些条件,您可以从命令行退出用户输入。例如,检查以下代码:

public class ScannerTry {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.printf("Enter with values: ");
    List<String> entries = new ArrayList<>();
    while(scanner.hasNext()){
        String symbol = scanner.next();
        if(symbol.equals("exit")){
            break;
        }
        entries.add(symbol);
    }
    System.out.println(entries);
}
}

条目列表具有用户到目前为止提供的所有输入。