A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. <blockquote>String name = "c:\\1\\2\\3.txt";
复制代码
以上代码:很简单,就是拿反斜杠去切这个目录
但是相信很多人都有不少疑问:"\\\\"到底是怎么一回事。(包括我自己一开始听毕老师讲课的时候也没有听明白。)

首先咱来说一下这个目录:"c:\\1\\2\\3.txt" ,
         这个应该不用多解释了,大家都知道,"\"在编译时有特殊的含义。"\t"是代表制表符,"\\"是代表一个反斜杠
         所以在运行的时候,内存中这个字符串是这样子的。"c:\1\2\3.txt"


再说下"\\\\":
         这个呢,按照普遍的思维想法应该是,既然我是用一个反斜杠去切,那么应该是写成"\\"这样才对,为什么是需要写四个。
通过查阅了正则表达式,发现,在正则表达式中。"\\"才是代表一个反斜杠。茅塞顿开.
"\\\\",首先经过的是java的编译之后,在内存中,就是变成了"\\",被转义成了两个反斜杠,然后才将它作为一个正则表达式传递给了split()的参数。

下面再看以下代码:
  1. String name = "c:\\1\\2\\3.txt";
  2.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  3.                 //输入一个正则表达式对目录进行切割。
  4.                 String regex = bufr.readLine();
  5.                 String[] arr = name.split(regex);
  6.                 for(String subName : arr) {
  7.                         System.out.println(subName);
  8.                 }
复制代码

在这里要注意了:输入的时候,请不要输入\\\\
否则,你会发现,怎么没切到。是不是得磨一下刀了。哈哈....
其实不是的,当读取控制台的数据时,这时候已经不是编译时期了,是运行时期了,java的编译管不到这一块,你输入的是什么,内存中的数据就是什么。
所以这个正则表达式实际上是\\\\代表的是两个反斜杠,当然切不到。


@耀阳圣尊      
明天要面试了,支个招吧,怎么我上一次就没有通过呢?给我的题能做出来,但是叫我说面向对象,反射,IO,集合,这些概念的时候,总结得稍差。
java注重的是实践,还是理论知识?就差在语言组织能力上了,意思差不多都懂,也能用。我该怎么做?圣尊。

3 个回复

倒序浏览
不错,非常详细的解释
回复 使用道具 举报
写的不错
回复 使用道具 举报

谢谢。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马