如何让Java通过Scanner接收换行符并输出对应ASCII值
问题分析与修复方案
错误原因
- 空指针异常根因:
Scanner的findInLine()方法传入的正则.默认不匹配换行符,当输入为单独的换行符时,方法返回null,直接调用charAt(0)就会触发空指针异常。 - 逻辑判断错误:你写的
input.equals("\\n")完全不成立,input是Scanner类的实例对象,不是你读取到的输入内容,二者类型完全不同,永远不会和字符串相等。
修复方案
方案1:基于现有Scanner逻辑修改
调整正则匹配规则,让.可以匹配换行符,不需要额外判断换行,转换为int后自然会得到换行的ASCII值10:
import java.util.Scanner; import java.util.regex.Pattern; public class Solution { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 开启DOTALL模式,正则.匹配包括换行在内的所有字符 String matched = input.findInLine(Pattern.compile(".", Pattern.DOTALL)); char charIn = matched.charAt(0); int intVal = (int) charIn; System.out.print(intVal); } }
方案2:更简单的单字符ASCII读取方案
如果只需要读取单个字符的ASCII值,不需要用到Scanner的复杂能力,直接用System.in.read()更高效,也不会出现换行适配问题:
public class Solution { public static void main(String[] args) throws Exception { // 直接读取输入流第一个字节的ASCII数值 int asciiVal = System.in.read(); System.out.print(asciiVal); } }
内容的提问来源于stack exchange,提问作者JG98
相关产品推荐
相关产品推荐

