Java使用Scanner读取输入时nextLine()返回值开头出现多余空格如何解决
问题原因
- 首次代码输出带多余空格的原因:
Scanner的next()方法默认以空白符(空格、换行、制表符等)作为分隔符,读取到第一个空白符就停止,读取完成后光标会停在首字符和后续字符串之间的分隔空格前侧。后续调用nextLine()会从当前光标位置开始读取到行尾,因此会把分隔用的空格也读进结果中。 - 修改后内容截断的原因:
新增的scnr.next()会跳过光标后的分隔空格,继续读取到下一个空白符(也就是示例中Today后面的空格)为止,直接把Today内容消费掉,剩下的is Monday才会被后续的nextLine()读取,因此出现内容截断。
解决方法
推荐两种适配你的数据集规则的可行方案:
- 方案1:直接对
nextLine()结果做截取,因为数据集固定首字符和后续字符串之间只有1个分隔空格,跳过结果的第一个字符即可:
charToSearch = scnr.next().charAt(0); // 跳过开头的分隔空格,取剩余内容 inputString = scnr.nextLine().substring(1);
- 方案2:优先读取整行再拆分,彻底避免
Scanner不同读取方法混用时的光标偏移问题,兼容性更强:
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { char charToSearch; String inputString; Scanner scnr = new Scanner(System.in); // 读取完整一行后按第一个空格拆分,拆分次数限制为2次,避免后续内容里的空格影响拆分结果 String fullLine = scnr.nextLine(); String[] parts = fullLine.split(" ", 2); charToSearch = parts[0].charAt(0); inputString = parts[1]; System.out.println(charToSearch); System.out.println(inputString); } }
内容的提问来源于stack exchange,提问作者Ranwolf Surveyir
相关产品推荐
相关产品推荐

