我做的一个小程序,可以批量的重命名文件。
在替换指定字符时,出现一些问题,特来向大家求助!
    语句为:result = now.replaceAll(before, after);但是,当文件名中包括 .$^+(){}[] 这些符号时,都会出现问题。其中$会在替换结果再加一个替换结果,^会在开头加一个。
比如,hello$everyone  替换$为X的结果是 helloXeveryoneX其他的会在每两个字符间加上替换结果! hi+ok 替换+为X 会得到 XhXiX+XoXkX这太让人疯狂了!谁能给个解决办法呀实在是不想先转义再替换再转义这样

解决方案 »

  1.   

    result = now.replaceAll(before, after);  // 这个是正则替换
    result = now.replace(before, after);  // 这个就是普通的替换
      

  2.   

    整理于 http://www.laozizhu.com/view.jsp?articleId=21
      

  3.   

    关键是replace如果用在比较长的字符串中替换所有的效率很低啊!!
    有没有更好的办法?
      

  4.   

    可以批量的重命名文件。 文件名能有多长? 我并不认为replaceAll比replace速度快。你测试过?
      

  5.   

    hi+ok 替换成 hiok可以用"hi+ok".replaceAll("\\+","");这样的正则就可以了!
      

  6.   

    感谢热心的竹子!可是,我并不知道是否替换的串里面有什么,我可能替换 i+ ,也可能替换hi+。这样,又变成先对输入的串进行过滤。另外,用reaplaceall来代替reaplace的话,有时候很多文件需要进行重命名,就必须替换多次,还需要注意看找到的数量直到是0为止。
    文件较少这样是无所谓的,但是多的话,比如1000个,速度慢几倍,有些难以接受了。除非replace函数可以告诉我,找到了没有,可惜它不肯。只能用contains()了,这个也是正则表达式吗?
      

  7.   

    如果你使用一种模式进行批量替换的话,建议使用 Pattern 类创建一个正则表达式,如果你使用 replaceAll 的话,
    每做一次替换都会去创建一个 Pattern 对象,用完后就扔掉了。至于为什么多次替换用 Pattern 呢,可以去看一下 java.lang.String#replaceAll 和 replace 两个方法的实现你就明白了。至于其他的,由于我不知道你具体要做什么,有什么要求,也没有办法回复了。
      

  8.   

    其实程序很简单啦。在程序中,打开一个文件夹,读取文件列表,之后使用替换功能,把指定的字符串替换成另外的字符串,然后批量重命名。但是遇到文件名中有些特殊的符号就出问题啦,尤其是(),很常见的。用Pattern可以替换()么?如何使一个文件名中出现的所有匹配串都被替换呢?我现在只会用replaceall()来替换,或者是用contains()判断还有没有,然后用replace()替换。有什么别的方法也可以的,我虽说会的不多,不过还不笨。