正则表达式虽然功能强大,但是其效率较低,除非是有需要,否则尽可能少用。
一、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; }