如何在没有空格的单行中获取整数数组的输入。数字只能是0-9,所以每个东西都是单个数字。
输入: -
123456
输出: -
a[0]=1 a[1]=2 a[2]=3 a[3]=4 a[4]=5 a[5]=6
请帮我解决这个问题。
答案 0 :(得分:6)
假设您正在以String形式输入,您可以执行类似的操作(自Java 8以来可以使用流和lambda)
String input = "123456";
int[] array = input.chars().map(i->i-'0').toArray();
System.out.println(Arrays.toString(array));
输出:[1, 2, 3, 4, 5, 6]
此代码可视为
的缩短版本String input = "123456";
int[] array = new int[input.length()];
int i = 0;
for (char c : input.toCharArray())
array[i++] = c - '0';
无论如何,此解决方案基于整数值或char
表示其在Unicode表中的索引的想法。由于数字按0,1,2,3,4,5,6,7,8,9
排序,因此我们对检查字符的位置与'0'
的位置之间的差异感兴趣。例如,'3'
位于索引51
,而'0'
的索引为48,因此int value = '3'-'0'
被翻译为int value = 51 - 48
,这会创建值为{的{ {1}}。
或者,如果这是一个选项,您可以通过简单地使用3
char[]
数组而不是int[]
,其中包含字符串中的所有字符
toCharArray
如果您对结果感兴趣String input = "123456";
char[] array = input.toCharArray();
,那么since Java 8 you can simply use
String[]
而不是神秘的(即使是那些具有基本正则表达式知识的人):String input = "123456";
String[] array = input.split("");
,split("(?!^)")
,split("(?<!^)")
或您能想到的任何正则表达式。
答案 1 :(得分:2)
以字符串形式接受并使用split()方法,如下所示:
"123".split("(?!^)")
将生成一个字符串数组
array ["1", "2", "3"]
答案 2 :(得分:0)
如果您假设您的整数都是单位数,您可以执行以下操作,但我没有注意到这样做的兴趣:
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int[] values = new int[s.length()];
for (int i=0 ; i<values.length ; i++)
values[i] = s.charAt(i) - '0';
答案 3 :(得分:0)
这样做的一种方法是认识到Scanner
类默认使用分隔符解析事物,而有一个名为findInLine()
的方法,其中&#34;尝试查找下一个出现的指定的模式忽略分隔符。&#34;
您可以创建一个匹配单个数字的Pattern
,然后让Scanner
通过sans-separator进行解析,如下所示:
Scanner scan = new Scanner("123456");
Pattern digit = Pattern.compile("\\d");
String nextInt = scan.findInLine(digit);
while (nextInt != null) {
System.out.println(nextInt);
nextInt = scan.findInLine(digit);
}
output:
1
2
3
4
5
6
答案 4 :(得分:0)
试试这个
“123456” .toCharArray()