You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用Scanner读取输入时nextLine()返回值开头出现多余空格如何解决

问题原因
  1. 首次代码输出带多余空格的原因:
    Scanner的next()方法默认以空白符(空格、换行、制表符等)作为分隔符,读取到第一个空白符就停止,读取完成后光标会停在首字符和后续字符串之间的分隔空格前侧。后续调用nextLine()会从当前光标位置开始读取到行尾,因此会把分隔用的空格也读进结果中。
  2. 修改后内容截断的原因:
    新增的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:39:03