zoukankan      html  css  js  c++  java
  • 一个有意思的小细节

    今天一个同事写下了这样一段Java代码:

    代码很简单:

    if (entryPath.contains("\\")) {
      entryPath.replaceAll("\\", '/');
    }


    仔细看一下这段代码,其实是很有意思的
    这段代码的本意是要查找entryPath中的反斜杠字符,如果有的话就全部替换掉,可是这段代码至少犯了两个严重错误,还有一个不那么严重的错误。
    1.replaceAll的参数使用的是正则表达式,而在正则表达式中反斜杠字符的匹配是字符串\\,那么看起来上面写的似乎没错,对吗?
    错了,正确的写法应该是entryPath.replaceAll("\\\\", "/");因为这样在运行的时候表达式才会是\\。

    2.entryPath.replaceAll("\\\\", "/");真正达到了效果吗?当然没有,Java中String是不可变的,所以这句话其实根本没有任何效果,替换完的字符串被丢掉了。

    3.效率问题:contains要启动字符串的匹配,需要做很多工作,而replaceAll要启动正则表达式的编译,工作量更大,其实上面两句话可以简单的修改为:

    String path = null;
    if (entryPath.indexOf('\\') != -1) {
    	path = entryPath.replace('\\', '/');
    }


  • 相关阅读:
    problems_springmvc
    skills_eclipse
    problems_azkaban
    CentOS7与CentOS6的不同
    2021暑期cf加训2
    2021牛客暑期多校训练营4
    2021牛客暑期多校训练营3
    2021暑期cf加训1
    2021牛客暑期多校训练营2
    10.git rm 移除文件
  • 原文地址:https://www.cnblogs.com/yueang/p/Java.html
Copyright © 2011-2022 走看看