[size=large][size=medium]有人面试回来,把许多Java基础题目发到论坛,呵呵 ,大公司一般都考基础或者很高级的。
对其中一道基础题目刚开始不是很理解
结果输出的许多斜杠("/")。刚开始有点不相信。想为何输出的全是斜线呢???
然后我换一个和replaceAll类似的replace方法测试。结果得到预料的结果java/lang/String。我就推测为何他们这么不一样呢?
由于没有下载Java源码,不好确定他们内部如何实现。稍微想了下找到一种很简单的方法。
在IDE自动提示中,我让他显示replace和replaceAll中所有的重载方法。结果发现replace里的方法全是普通字符或者字符串类型,而replaceAll方法的第一参数显示regx,凭这里看出replaceAll方法第一个参数是个正则。
而点号用在正则中正好代表匹配所有字符。所以字符全被斜杠替换了。原来如此!!!!
根据这个推断我再把原有的字符串长度打印,然后再打印匹配后出现的字符串斜杠的长度,结果他们的长度正好一样。
如果实在想只是替换点号那就需要转义下
[/size][size=large][/size][/size]
基础很重要啊,千里之行始于足下,万丈高楼平地起
对其中一道基础题目刚开始不是很理解
String classPath2 = "java.lang.String";
System.out.println(classPath2.replaceAll(".", "/"));
结果输出的许多斜杠("/")。刚开始有点不相信。想为何输出的全是斜线呢???
然后我换一个和replaceAll类似的replace方法测试。结果得到预料的结果java/lang/String。我就推测为何他们这么不一样呢?
由于没有下载Java源码,不好确定他们内部如何实现。稍微想了下找到一种很简单的方法。
在IDE自动提示中,我让他显示replace和replaceAll中所有的重载方法。结果发现replace里的方法全是普通字符或者字符串类型,而replaceAll方法的第一参数显示regx,凭这里看出replaceAll方法第一个参数是个正则。
而点号用在正则中正好代表匹配所有字符。所以字符全被斜杠替换了。原来如此!!!!
根据这个推断我再把原有的字符串长度打印,然后再打印匹配后出现的字符串斜杠的长度,结果他们的长度正好一样。
String classPath = "java.lang.String";
System.out.println(classPath.replace(".", "/"));
String classPath2 = "java.lang.String";
System.out.println("classpath2--length\t"+classPath2.length());
String classpath3=classPath2.replaceAll(".", "/");
System.out.println("classpath3--\t"+classpath3+"\t"+classpath3.length());
如果实在想只是替换点号那就需要转义下
[/size][size=large][/size][/size]
基础很重要啊,千里之行始于足下,万丈高楼平地起