我们假设我想拆分以下字符串wrt \n
嗨!\n你好吗?我很好
当我使用以下代码(即初始化代码中的字符串)时:
String l = "Hi!\nHow are u doing\nI am good" String[] sp = l.split("\\n");
它按预期工作!
但是如果我从InputStream获得输入 :
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String l = br.readLine(); String[] sp = l.split("\\n");
它没有拆分!
知道为什么会这样吗?
在阅读第二种情况时,您没有任何要拆分的东西.你读了一行,所以你读到那时\n
你不能分开它,因为它已被读者分开了.
如文档中所述
读一行文字.一条线被认为是由换行符('\n'),回车符('\ r')或回车符中的任何一个终止,后面紧跟换行符.
编辑:
对于您的情况,您所做错的可能是您从代码中复制并粘贴字符串并期望以相同的方式工作.
之所以导致整个输入而不是输出是因为out不能输入\n
并且期望等于换行.现实是你传递两个char \
和n
.因此,当您使用返回键值确认它时,该值将从System in传递给您
[H,i,!,\,n,H,o,w, ,a,r,e, ,u, ,d,o,i,n,g,\,n,I, ,a,m, ,g,o,o,d]
你的例子中的第一个字符串是哪里
[H,i,!,\n,H,o,w, ,a,r,e, ,u, ,d,o,i,n,g,\n,I, ,a,m, ,g,o,o,d]
结束作为输入传递的字符串将以与代码中定义的字符串不同的方式处理.它们似乎相同,因为\
它在Java中具有特殊含义.