Java中charAt(i)==' '判断空格不生效问题排查
空格判断分支永远不触发,核心原因是Scanner的next()方法的默认读取规则:next()默认以所有空白字符(空格、制表符、换行、回车等)作为输入分隔符,调用时只会读取到第一个分隔符之前的内容,分隔符本身以及后面的内容都不会被存入返回的字符串里。
也就是说你代码里的text变量从一开始就不可能包含空格字符,遍历的时候自然永远匹配不到' ',对应分支当然不会执行。你代码里判断字符为a的分支能正常触发,也是因为a不属于空白分隔符,会被next()正常读入。
举个例子:如果控制台输入test abc,in.next()实际只会读取到test,后面的空格和abc都会留在输入缓冲区,根本不会进入text变量。
你可以根据自己的需求选下面任意一种方案修改:
方案1:读取整行输入(最常用)
把读取输入的in.next()替换成in.nextLine(),这个方法会读取一整行内容直到换行符,行内的所有空格都会被完整保留:String text = in.nextLine();注意:如果你之前已经调用过
nextInt()、next()这类不会消费末尾换行符的方法,直接调用nextLine()会读到空字符串,需要先额外调用一次nextLine()把缓冲区里残留的换行符消费掉;但你当前给出的代码是首次读取输入,不存在这个问题,直接替换即可。方案2:修改Scanner的默认分隔符
如果你不想用nextLine(),也可以手动给Scanner设置分隔符为换行符,这样next()就会把换行前的所有内容(包括空格)都读进来:// 设置分隔符为换行符 in.useDelimiter("\n"); String text = in.next();
修改完成后重新运行,输入带空格的文本时,空格判断分支就可以正常触发输出了。
内容的提问来源于stack exchange,提问作者Wesam Alboishe

