为何Java中Scanner输入的"abc\nabc"里的\n不被解析为换行符?
为什么Scanner输入的包含
\n的字符串打印时不换行? 这本质是字符串字面量的转义处理和控制台输入字符的区别:
硬编码的
"abc\nabc"里的\n是Java的转义序列:Java编译器在编译阶段会把这个转义序列解析成ASCII换行符(对应十进制10的控制字符),所以打印时这个字符会触发控制台换行。用
Scanner.nextLine()输入的abc\nabc是两个普通字符的组合:你在控制台输入的\和n是独立的可见字符,Scanner会原封不动把它们读进字符串里,此时字符串里存的是a、b、c、\、n、a、b、c,打印时自然会把\n当作普通文本输出,不会触发换行。
你可以打印两个字符串的长度来验证差异:
System.out.println(s1.length()); // 输出7:abc + 换行符 + abc,共3+1+3=7 System.out.println(s2.length()); // 输出8:abc + \ + n + abc,共3+2+3=8
如果想要让输入的\n也能触发换行,可以手动做转义替换:
String s2 = sc.nextLine().replace("\\n", "\n");
你的示例验证
代码:
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s1 = "abc\nabc"; String s2 = sc.nextLine(); System.out.println(s1); System.out.println(s2); } }
输入:
abc\nabc
输出:
abc abc abc\nabc
内容的提问来源于stack exchange,提问作者Digvijay Singh
相关产品推荐
相关产品推荐

