下面的程序所要做的事情正是前一个谜题所做的事情,但是它没有假设斜杠符号就是分隔文件名组成部分的符号。相反,该程序使用的是java.io.File.separator,它被指定为一个公共的String域,包含了平台相关的文件名分隔符。那么,这个程序会打印出其正确的、平台相关的类文件名吗? package com.javapuzzlers. import java.io.File. public class MeToo { public static void main(String[] args){ System.out.println(MeToo.class.getName(). replaceAll("\\.", File.separator) ".class"). } }
这个程序根据底层平台的不同会显示两种行为中的一种。如果文件分隔符是斜杠,就像在UNIX上一样,那么该程序将打印com/javapuzzlers/MeToo.class,这是正确的。但是,如果文件分隔符是反斜杠,就像在Windows上一样,那么该程序将打印像下面这样的内容: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(String.java:558) at java.util.regex.Matcher.appendReplacement(Mather. java:696) at java.util.regex.Matcher.replaceAll(Mather.java:806) at java.lang.String.replaceAll(String.java:2000) at com.javapuzzlers.MeToo.main(MeToo.java:6)