replace 和 replaceAll 的区别
Posted hellovoyager1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了replace 和 replaceAll 的区别相关的知识,希望对你有一定的参考价值。
replace 和 replaceAll 都是Java 中常用的替换字符串的方法
replace :
public String replace(CharSequence target, CharSequence replacement) {
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}
replaceAll:
public String replaceAll(String regex, String replacement) {
}
区别: 参数不同,replace 的参数是char 和CharSequence(字符串序列) ,即可以支持字符的替换,也支持字符串的替换,而replaceAll 的参数是regex,即基于正则表达式的替换,比如可以通过replaceAll("d","*") 把一个字符串中的所有数字字符替换为星号
相同点: 都是全部替换, 如果只想替换第一次出现的可以使用replaceFirest() ,这个方法也是基于正则表达式的替换, 但与replaceAll 不同的是, 只替换第一次出现的字符串
还需要注意的一点是执行了替换之后源字符串是没有发生改变的
1、常用元字符
. | 表示除了换行符之外任意一个字符 |
\\s | 空格字符(空格键、tab、换行、回车) |
\\S | 非空格字符([^\\s]) |
\\d | 一个数字,(相当于[0-9]) |
\\D | 一个非数字的字符,(相当于[^0-9]) |
\\w | 一个单次字符(word character)(相当于[a-zA-Z0-9]还有下划线) |
^ | 一行的开始 |
$ | 一行的结尾 |
\\b | 一个单词的边界 |
\\B | 一个非单词的边界 |
[] | 匹配方括号内的一个字符,例如:[abc]表示字符a,b,c中的任意一个(与a|b|c相同) |
[^x] | 匹配除了x 以外的任意字符 |
[^aeiou] | 匹配除了aeiou 这几个字母以外的任意字符 |
2、表示次数的元字符(限定符)
* | 重复零次或更多次 |
例如:a*匹配零个或者多个a | |
+ | 重复一次或更多次 |
例如:a+匹配一个或者多个a | |
? | 重复零次或一次 |
例如:a?匹配零个或者一个a | |
{n} | 重复n次 |
例如:a{4}匹配4个a | |
{n,} | 重复n次或更多次 |
例如:a{4,}匹配至少4个a | |
{n,m} | 重复n到m次 |
例如:a{4,10}匹配4-10个a |
3、正则表达式定位符
^
^hell
|
定位符规定匹配模式必须出现在目标字符串开头 |
hello、hellboy | |
$
ar$
|
定位符规定匹配模式必须出现在目标字符串结尾 |
car、bar | |
\\b
\\bbom、man\\b
|
定位符规定匹配模式必须出现在目标字符串开头或结尾两个边界之一 |
bomb、human/woman | |
\\B
\\Bjava\\B
|
定位符规定匹配模式必须出现在目标字符串开头和结尾两边界之内 |
ForjavaEJB |
4、常用正则表达式
1、中文字符的匹配
正则表达式支持Unicode码,汉字范围可使用Unicode来表示
·[\\u4E00-\\u9FA5]汉字
·[\\uFE30-\\uFFA0]全角字符
·[^\\x00-\\xff]匹配双字节字符(包括汉字在内)
详细了解正则表达式可以查看博客 https://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
以上是关于replace 和 replaceAll 的区别的主要内容,如果未能解决你的问题,请参考以下文章
String 类中replace 和replaceAll方法的区别