Java 扫描仪阅读前导 Space
Java Scanner Reading Leading Space
我正在尝试创建一个菜单,该菜单接受 switch case 的字符输入并循环直到输入为 q 但在循环之后 运行 一旦出现此错误:
线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 在 java.lang.String.charAt(未知来源)在 Menu.main(Menu.java:19)
这意味着它得到了一个空输入吗?所以我添加了 .trim() 但我仍然收到错误,它甚至不等待输入我只是收到错误。
抱歉,如果之前已经回答过这个问题,但我无法在任何地方找到它。我也试过添加 keyboard.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");这也不起作用。
为带有错误日志的程序提供的输入:
Enter Option (a,b,c,d,e,f,q):
c
Enter 2 Numbers
First Number:
1
Second Number:
10
1, 2, 3, 4, 5,
6, 7, 8, 9, 10
Enter Option (a,b,c,d,e,f,q):
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at Menu.main(Menu.java:19)
代码:
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner (System.in);
char ch; int m,n; String y;
do
{
System.out.println("Enter Option (a,b,c,d,e,f,q):");
ch = keyboard.nextLine().toLowerCase().charAt(0);
switch (ch)
{
case 'c':
System.out.println("Enter 2 Numbers");
System.out.println("First Number: ");
m = keyboard.nextInt();
System.out.println("Second Number: ");
n = keyboard.nextInt();
for(int i = 1; i <= n - m + 1; i++)
{
if (i % 5 == 0)
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.println(", ");
}
}else
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.print(", ");
}
}
}
System.out.println("");
break;
}
}while (ch != 'q');
}
}
这是更新后的代码请检查:
public static void main(String[] args)
{
Scanner keyboard = new Scanner (System.in);
char ch;
do
{
System.out.println("Enter Option (a,b,c,d,e,f,q):");
ch = keyboard.nextLine().toLowerCase().charAt(0);
switch (ch)
{
//case statements for a,b,c,d,e and f
}
}while (ch != 'q');
}
这里的主要内容是扫描仪在您点击“输入”后立即处理输入。
因此,如果您的输入要在第 19 行输入 '\u0020'
(whitespaces) 甚至多次,那么根据 javadoc charAt
.
,您正在对空行执行 trim
尝试行 ch = keyboard.next().charAt(0);开关(声道)
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner (System.in);
char ch; int m,n; String y;
do
{
System.out.println("Enter Option (a,b,c,d,e,f,q):");
ch = keyboard.next().charAt(0);
switch (ch)
{
case 'c':
System.out.println("Enter 2 Numbers");
System.out.println("First Number: ");
m = keyboard.nextInt();
System.out.println("Second Number: ");
n = keyboard.nextInt();
for(int i = 1; i <= n - m + 1; i++)
{
if (i % 5 == 0)
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.println(", ");
}
}else
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.print(", ");
}
}
}
System.out.println("");
break;
}
}while (ch != 'q');
}
}
编码愉快!
我正在尝试创建一个菜单,该菜单接受 switch case 的字符输入并循环直到输入为 q 但在循环之后 运行 一旦出现此错误:
线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 在 java.lang.String.charAt(未知来源)在 Menu.main(Menu.java:19)
这意味着它得到了一个空输入吗?所以我添加了 .trim() 但我仍然收到错误,它甚至不等待输入我只是收到错误。
抱歉,如果之前已经回答过这个问题,但我无法在任何地方找到它。我也试过添加 keyboard.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");这也不起作用。
为带有错误日志的程序提供的输入:
Enter Option (a,b,c,d,e,f,q):
c
Enter 2 Numbers
First Number:
1
Second Number:
10
1, 2, 3, 4, 5,
6, 7, 8, 9, 10
Enter Option (a,b,c,d,e,f,q):
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at Menu.main(Menu.java:19)
代码:
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner (System.in);
char ch; int m,n; String y;
do
{
System.out.println("Enter Option (a,b,c,d,e,f,q):");
ch = keyboard.nextLine().toLowerCase().charAt(0);
switch (ch)
{
case 'c':
System.out.println("Enter 2 Numbers");
System.out.println("First Number: ");
m = keyboard.nextInt();
System.out.println("Second Number: ");
n = keyboard.nextInt();
for(int i = 1; i <= n - m + 1; i++)
{
if (i % 5 == 0)
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.println(", ");
}
}else
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.print(", ");
}
}
}
System.out.println("");
break;
}
}while (ch != 'q');
}
}
这是更新后的代码请检查:
public static void main(String[] args)
{
Scanner keyboard = new Scanner (System.in);
char ch;
do
{
System.out.println("Enter Option (a,b,c,d,e,f,q):");
ch = keyboard.nextLine().toLowerCase().charAt(0);
switch (ch)
{
//case statements for a,b,c,d,e and f
}
}while (ch != 'q');
}
这里的主要内容是扫描仪在您点击“输入”后立即处理输入。
因此,如果您的输入要在第 19 行输入 '\u0020'
(whitespaces) 甚至多次,那么根据 javadoc charAt
.
尝试行 ch = keyboard.next().charAt(0);开关(声道)
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner (System.in);
char ch; int m,n; String y;
do
{
System.out.println("Enter Option (a,b,c,d,e,f,q):");
ch = keyboard.next().charAt(0);
switch (ch)
{
case 'c':
System.out.println("Enter 2 Numbers");
System.out.println("First Number: ");
m = keyboard.nextInt();
System.out.println("Second Number: ");
n = keyboard.nextInt();
for(int i = 1; i <= n - m + 1; i++)
{
if (i % 5 == 0)
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.println(", ");
}
}else
{
System.out.print(i);
if (i != n - m + 1)
{
System.out.print(", ");
}
}
}
System.out.println("");
break;
}
}while (ch != 'q');
}
}
编码愉快!