Java初学者求助:Scanner使用useDelimiter读取整行的相关疑问
Scanner中System.getProperty("line.separator")的作用解析
给你拆解清楚核心逻辑:
- Scanner默认的分隔规则是匹配所有空白字符(空格、制表符、换行符全算),所以默认调用
next()时,只会读到第一个空格就停止,这就是你输入"Hanu babbar"只能拿到"Hanu"的原因。 System.getProperty("line.separator")的作用很直接:获取当前操作系统的换行符——Windows系统下是\r\n,Linux和macOS系统下是\n,用它可以实现跨系统的换行符适配,不用硬写死某一种固定格式。
当你把Scanner的分隔符改成换行符后,next()方法的行为就变了:它会从当前位置一直读到换行符为止,中间的空格、制表符都会被当成普通字符保留,自然就能完整读取包含空格的"Hanu babbar"了。
其实这种写法和直接用sc.nextLine()效果完全一致,只是换了一种实现思路而已。
附上你提到的代码片段:
Scanner sc = new Scanner(System.in); sc.useDelimiter(System.getProperty("line.separator")); System.out.println("Please enter your name"); String name = sc.next(); System.out.println("Hello " + name); sc.close();
内容的提问来源于stack exchange,提问作者Hanu babbar
相关产品推荐
相关产品推荐

