我有一个简单的代码,可以读取用户输入的值:
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";
...
任何想法如何做到这一点?
答案 0 :(得分:3)
使用Scanner#nextLine
(documentation来读取完整的输入,而不仅仅是单个令牌。然后在生成的String#toCharArray
上调用String
(documentation)。然后,您将得到一个char[]
,其中包含所有字符。
String input = scanner.nextLine();
char[] values = input.toCharArray();
int[]
如果您想验证输入(仅0
和1
)并且可能更喜欢使用int[]
而不是char[]
,则只需遍历单个字符,验证并收集它们。
在这种情况下,您应该首选String#charAt
(documentation)以避免由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);
}
}
条目列表具有用户到目前为止提供的所有输入。