java怎么输入字符串:两种主流实现
java怎么输入字符串,实际开发里常用Scanner和BufferedReader两类实现,Scanner上手简单适合课堂练习、小型测试程序,BufferedReader读取效率更高适合大批量文本读取,Scanner读取字符串会把空格视作输入结束标记,遇到带空格的完整句子会截断,BufferedReader可以读取包含空格的整行内容,JDK8到JDK21版本均支持这两套API,控制台交互场景优先选用,图形界面、网络程序不适用这两种控制台输入方式。
java怎么输入字符串之Scanner方式
你需要导入java.util.Scanner工具包,创建Scanner对象绑定标准输入流System.in,调用next方法获取字符串,next方法读取到空格、制表符、换行符就停止接收内容,只能拿到不含空格的片段。写代码时先声明Scannersc=newScanner(System.in),再定义Stringstr=sc.next()完成接收,程序运行后控制台等待键盘录入,回车确认输入,代码末尾要调用sc.close关闭输入流,减少资源占用。
nextLine方法可以读取带空格的整行字符串,同样依托Scanner对象,写法为Stringstr=sc.nextLine(),如果前面执行过nextInt、next这类读取操作,缓冲区会残留换行符,直接调用nextLine会读到空字符串,出现该现象时,你可以额外写一次sc.nextLine吃掉残留换行符,再接收目标字符串。
Scanner有明显性能短板。
java怎么输入字符串之BufferedReader方式
BufferedReader属于IO流工具,需要导入java.io.BufferedReader与java.io.InputStreamReader,实例化写法为BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)),使用readLine方法读取一行输入,返回完整字符串,包含句子内部全部空格,readLine遇到回车才结束读取,不会被中间空格打断。调用readLine会抛出IOException受检异常,你要么在main方法声明throwsIOException向外抛出异常,要么使用try‑catch捕获异常,否则代码无法编译通过。
| 输入方式 | 能否读取空格 | 性能表现 | 额外约束 |
|---|---|---|---|
| Scannernext() | 不能 | 一般 | 无需处理异常 |
| ScannernextLine() | 可以 | 一般 | 缓冲区换行残留问题 |
| BufferedReaderreadLine() | 可以 | 较好 | 必须处理IO异常 |
Oracle官方JDK文档明确标注,Scanner更适合简单交互原型,大批量读取文本内容建议选用BufferedReader。输入为空或者直接回车时,readLine会返回null,你写业务逻辑时要增加判空逻辑,避免后续字符串操作触发空指针异常。
控制台输入的适用边界是程序运行在终端控制台环境,Web项目、Swing图形程序不能使用这两套控制台读取代码,这类场景需要改用表单、组件接口接收文本,强行套用控制台输入代码会造成程序阻塞,界面失去响应。
不要混用next和nextLine而不处理缓冲区。
简单的学生作业、小demo直接选Scanner,写少量代码就可以跑通;处理多行、大量文本的工具类程序,优先选择BufferedReader降低IO开销,读取得到字符串之后,你可以调用length获取长度、split分割文本,开展后续业务处理。
