Java 为什么我的扫描器仍然需要一个空格字符
投入:1 2 3 目标:每个数字都将填充在同一个数组中。空间将被排除在外Java 为什么我的扫描器仍然需要一个空格字符,java,Java,投入:1 2 3 目标:每个数字都将填充在同一个数组中。空间将被排除在外 Scanner in = new Scanner(System.in); String n = in.nextLine(); System.out.println(n); int[] nums = new int[n.length()]; for (int i = 0; i < n.length(); i++) { System.out.println(n.charAt(i)); if (!S
Scanner in = new Scanner(System.in);
String n = in.nextLine();
System.out.println(n);
int[] nums = new int[n.length()];
for (int i = 0; i < n.length(); i++) {
System.out.println(n.charAt(i));
if (!String.valueOf(n.charAt(i)).equalsIgnoreCase(" ")) {
nums[i] = Character.getNumericValue(n.charAt(i));
}
}
Scanner-in=新的扫描仪(System.in);
字符串n=in.nextLine();
系统输出println(n);
int[]nums=newint[n.length()];
对于(int i=0;i
我不知道为什么它仍然包含空格
“
”您可以使用以下方法拆分输入行:
String n = in.nextLine();
String[] splitLine = n.split(" ");
for (String s : splitLine){
//you can save the num in an array
int num = Integer.parseInt(s);
}
按照这种方式,nums数组中的元素数将与“n”中的字符数相同。在char是空格的地方,你会得到值0。 您可以这样尝试:
String[] numStrings = n.split("\\D+");
int[] nums = new int[numStrings.length];
int i = 0;
for (String num : numStrings) {
nums[i] = Integer.parseInt(num);
i++;
}
这段代码的问题是,当您查看的
char
是一个空格时,您会增加i
事件,这样您的数组中将有空的位置nums
您可以通过以下方式轻松解决此问题:
String n = in.nextLine().replaceAll("\\D", "");
我将从您键入的内容中删除所有非数字字符
,这样您就不必检查:
int[] nums = new int[n.length()];
for (int i = 0; i < n.length(); i++){
nums[i] = Character.getNumericValue(n.charAt(i));
}
擦除所有非数字后,第二行将把每一行拆分为一个数组,然后转换为
int
,然后转换为数组我将.equalsIgnoreCase
更改为.equals
,并使用指针插入数组
Scanner in = new Scanner(System.in);
String n = in.nextLine();
System.out.println(n);
int pointer = 0;
int[] nums = new int[n.length()];
for (int i = 0; i < n.length(); i++) {
if (!String.valueOf(n.charAt(i)).equals(" ")) {
nums[pointer] = Character.getNumericValue(n.charAt(i));
pointer++;
}
}
Scanner-in=新的扫描仪(System.in);
字符串n=in.nextLine();
系统输出println(n);
int指针=0;
int[]nums=newint[n.length()];
对于(int i=0;i
实现这一目标的一个简单方法是执行以下操作:
String n = in.nextLine().replace(" ", "");
int nums[] = new int[n.length()];
int i=0;
for(char c : n.toCharArray()) {
nums[i++] = Character.getNumericValue(c);
}
您是否尝试过使用调试器进行单步调试?如果(!String.valueOf(n.charAt(i)).equalsIgnoreCase(“”)执行手动检查,显然这不起作用,但调试器显示元素不是空的。。这是一个巨大的代码片段,我可能太累了。要么拿出它!或者去掉“ignoreCase”,它们一起给出了相反的期望结果。我嵌入它是因为“!=”代码>,但让我试试。编辑:不,仍然是控制台中显示的相同行为。但是如果我错了,请纠正我,!String.valueOf(n.charAt(i)).equalsIgnoreCase(“”
表示不接受任何空格字符。正常情况下,是的,但对我来说,它只打印带有空框的数字,如果您在末尾打印所有元素,您有什么?他还是编辑了它。不回来了,我已经给他了,我只是不想收回。作为我的感谢,额外的东西将被发送,不要问我在说什么。Lol@Plain_Dude_Sleeping_Alone好的,我明白了,谢谢:p我会删除我的评论,它们现在没用了不,不要。不要只是删除东西,这样将来的读者可能会以某种方式追踪问题本身背后的原因/逻辑/任何东西。如果你输入两个相邻的空格,或者特殊的字符或字母,这是不起作用的。该死,这对第二个相邻的空格不起作用。编辑:我错过了你的编辑。非常感谢。再次接受并加一。
String n = in.nextLine().replace(" ", "");
int nums[] = new int[n.length()];
int i=0;
for(char c : n.toCharArray()) {
nums[i++] = Character.getNumericValue(c);
}