如何检查数组中是否包含含空格的单词?Java代码运行异常求助
问题出在
Scanner.next()的特性上! 你遇到的问题核心在于Scanner.next()这个方法的行为:它以任意空白字符(空格、换行、制表符等)作为分隔符,每次只会读取到第一个空格为止的内容。举个例子,当你输入hey guys时,第一次调用next()会拿到hey,第二次调用才会拿到guys——你的代码里永远不会读到完整的hey guys字符串,自然就匹配不上啦。
两种快速解决方法
方法1:改用Scanner.nextLine()读取整行内容
nextLine()会读取从当前光标位置到换行符的所有内容,包括中间的空格,完美适配带空格的字符串。不过要注意一个小坑:你之前用了nextInt()读取数字,它会在输入缓冲区里留下一个换行符,直接调用nextLine()会先读到这个空的换行内容,所以得先调用一次nextLine()把它“吃掉”。
修改后的完整代码:
import java.util.Scanner; public class CheckSpaceWord { public static void main(String[] args) { Scanner in = new Scanner(System.in); int num = in.nextInt(); // 处理nextInt()留下的换行符,避免第一次nextLine()读到空字符串 in.nextLine(); String[] array = new String[num]; for (int i = 0; i < num; i++) { array[i] = in.nextLine(); if (array[i].equals("hey guys")) { System.out.println("hey guys"); } else { System.out.println("buzz"); } } in.close(); } }
方法2:修改Scanner的分隔符为换行符
如果你更习惯用next(),可以把Scanner的分隔符设置成只识别换行符,这样next()就会把整行内容(包括空格)当成一个完整的输入项来读取。
代码示例:
import java.util.Scanner; public class CheckSpaceWord { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 将分隔符设置为换行符,让next()读取整行内容 in.useDelimiter("\n"); // 因为分隔符改了,直接用next()读取数字字符串再转成int int num = Integer.parseInt(in.next()); String[] array = new String[num]; for (int i = 0; i < num; i++) { array[i] = in.next(); if (array[i].equals("hey guys")) { System.out.println("hey guys"); } else { System.out.println("buzz"); } } in.close(); } }
小提示
- 方法1里的换行符处理一定要记得,不然第一次循环会读取到空字符串,导致逻辑出错。
- 方法2中如果还是想用
nextInt(),其实也可以,但要注意nextInt()会跳过换行符之外的空白,不过因为我们把分隔符设成了换行,所以nextInt()会正确读取数字,之后同样需要处理留下的换行符,不如直接用Integer.parseInt(in.next())来得省心。
内容的提问来源于stack exchange,提问作者Naeema Ibrahim
相关产品推荐
相关产品推荐

