正則表達式雖然功能強大,但是其效率較低,除非是有需要,否則盡可能少用。
一、replaceAll()和replace()的相同點:
都是全部替換,即把源字符串中的某一字符或字符串全部換成指定的字符或字符串;
二、replaceAll()和replace()的不同點:
replaceAll() 支持正則,replace() 不支持正則。
replaceAll的參數是regex,即基於規則表達式的替換,比如:可以通過replaceAll("\\d", "*")把一個字符串所有的數字字符都換成星號;
replaceAll支持正則表達式,因此會對參數進行解析(兩個參數均是),如replaceAll("\\d", "*"),而replace則不會,replace("\\d","*")就是替換"\\d"的字符串,而不會解析為正則。
三、建議:
1、如果僅僅是字符的替換建議使用replace()。
2、如果只想替換第一次出現的,可以使用replaceFirst(),這個方法也是基於規則表達式的替換,但與replaceAll()不同的是,只替換第一次出現的字符串。
例子1:
/** * token 到期退出登錄 * * @param token * @return */ public boolean logout(String token) { try { User u = new User(); token = token.replaceAll(pre + "TPS-TOKEN", ""); String userId = token.substring(15, token.length());/** 截取userId*/ if (StringUtils.isNotEmpty(userId)) { u.setUserId(Integer.parseInt(userId)); } if (null != u && u.getUserId() != null) { logout(u, token); } } catch (Exception e) { logger.error(e.getMessage()); } return true; }