Java中std string replace类型可以调用的方法到底是replaceAll(),还是replace()?怎么书上说的不一致?

java中带回调函数的字符串替换,类似js中的replace(rgExp,function) - 史努比 - ITeye技术网站
博客分类:
java中带回调函数的字符串替换,类似js中的replace(rgExp,function)
&&&&&&&&&&&&&& yy 于日10:10
& 在js中, replace函数的功能很强大,其原型是stringObj.replace(rgExp, replaceText), 而replaceText也可以是返回替换文本的函数。这个功能还是比较好的.
function f2c(s) {
var test = /(\d+(\.\d*)?)℉/g;
return(s.replace(test,function($0,$1,$2) {
return((($1-32) * 5/9) + "℃");
alert(f2c("Water freezes at 32℉ and boils at 212℉."));
// 结果是Water freezes at 0℃ and boils at 100℃.
如果在java中怎么写呢?
java中的replace方法也很强大,只是不支持回调函数
所以就动手写了个简单的替换工具类,
* @author yeyong
public class StringUtils { // 就把它们放在StringUtils工具类中了
* 将String中的所有regex匹配的字串全部替换掉
* @param string 代替换的字符串
* @param regex 替换查找的正则表达式
* @param replacement 替换函数
public static String replaceAll(String string, String regex, ReplaceCallBack replacement) {
return replaceAll(string, pile(regex), replacement);
* 将String中的所有pattern匹配的字串替换掉
* @param string 代替换的字符串
* @param pattern 替换查找的正则表达式对象
* @param replacement 替换函数
public static String replaceAll(String string, Pattern pattern, ReplaceCallBack replacement) {
if (string == null) {
Matcher m = pattern.matcher(string);
if (m.find()) {
StringBuffer sb = new StringBuffer();
int index = 0;
while (true) {
m.appendReplacement(sb, replacement.replace(m.group(0), index++, m));
if (!m.find()) {
m.appendTail(sb);
return sb.toString();
* 将String中的regex第一次匹配的字串替换掉
* @param string 代替换的字符串
* @param regex 替换查找的正则表达式
* @param replacement 替换函数
public static String replaceFirst(String string, String regex, ReplaceCallBack replacement) {
return replaceFirst(string, pile(regex), replacement);
* 将String中的pattern第一次匹配的字串替换掉
* @param string 代替换的字符串
* @param pattern 替换查找的正则表达式对象
* @param replacement 替换函数
public static String replaceFirst(String string, Pattern pattern, ReplaceCallBack replacement) {
if (string == null) {
Matcher m = pattern.matcher(string);
StringBuffer sb = new StringBuffer();
if (m.find()) {
m.appendReplacement(sb, replacement.replace(m.group(0), 0, m));
m.appendTail(sb);
return sb.toString();
回调类及其一个抽象类
* 字符串替换的回调接口
* @author yeyong
public interface ReplaceCallBack {
* 将text转化为特定的字串返回
* @param text 指定的字符串
* @param index 替换的次序
* @param matcher Matcher对象
public String replace(String text, int index, Matcher matcher);
* 抽象的字符串替换接口
* &p&主要是添加了$(group)方法来替代matcher.group(group)
* @author yeyong
public abstract class AbstractReplaceCallBack implements ReplaceCallBack {
protected M
* (non-Javadoc)
* @see utils.ReplaceCallBack#replace(java.lang.String, int, java.util.regex.Matcher)
final public String replace(String text, int index, Matcher matcher) {
this.matcher =
return doReplace(text, index, matcher);
} finally {
this.matcher =
* 将text转化为特定的字串返回
* @param text 指定的字符串
* @param index 替换的次序
* @param matcher Matcher对象
public abstract String doReplace(String text, int index, Matcher matcher);
* 获得matcher中的组数据
* &p&等同于matcher.group(group)
* &p& 该函数只能在{@link #doReplace(String, int, Matcher)} 中调用
* @param group
protected String $(int group) {
String data = matcher.group(group);
return data == null ? "" :
String string = "the quick-brown fox jumps over the lazy-dog.";
String pattern = "\\b(\\w)(\\w*?)\\b";
// 将每个单词改为首字大写其他字母小写
System.out.println(StringUtils.replaceAll(string, pattern,
new AbstractReplaceCallBack() {
public String doReplace(String text, int index, Matcher matcher) {
return $(1).toUpperCase() + $(2).toLowerCase();
//输出:The Quick-Brown Fox Jumps Over The Lazy-Dog.
// 将文本中类似aaa-bbb-ccc的替换为AaaBbbCcc
string = "the quick-brown fox jumps over the lazy-dog. aaa-bbbb-cccc-ddd";
pattern = "\\b\\w+(?:-\\w+)+\\b";
System.out.println(StringUtils.replaceAll(string, pattern,
new AbstractReplaceCallBack() {
private ReplaceCallBack callBack = new AbstractReplaceCallBack() {
public String doReplace(String text, int index, Matcher matcher) {
return $(1).toUpperCase() + $(2).toLowerCase();
public String doReplace(String text, int index, Matcher matcher) {
return StringUtils.replaceAll(text, "(?:\\b|-)(\\w)(\\w*?)\\b", callBack);
// 输出: the QuickBrown fox jumps over the LazyDog. AaaBbbbCcccDdd
//过滤安全字符... TODO 应提取为一个方法
final Map&String, String& map = new HashMap&String, String&() {
private static final long serialVersionUID = 1L;
put("&", "&");
put("&", "&");
put("\"", "&");
put("'", "&");
ReplaceCallBack callBack = new ReplaceCallBack() {
public String replace(String text, int index, Matcher matcher) {
return map.get(text);
string = "&html&&body&xxxxx 1&4 & 7&5&/body&&/html&";
System.out.println(StringUtils.replaceAll(string.replace("&", "&"),
"[&&\"\']", callBack));
// 输出: &html&&body&xxxxx 1&4 & 7&5&/body&&/html&
// 实现上面js例子的替换
string = "Water freezes at 32℉ and boils at 212℉.";
System.out.println(StringUtils.replaceAll(string, "(\\d+(\\.\\d*)?)℉",
new AbstractReplaceCallBack() {
public String doReplace(String text, int index, Matcher matcher) {
return (((Double.parseDouble($(1)) - 32) * 5 / 9) + "℃");
// 输出: Water freezes at 0.0℃ and boils at 100.0℃.
这样不就行了?String str = "100℉";
Matcher matcher = pile("(\\d+(\\.\\d*)?)℉").matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String g=matcher.group();
String num=(Double.parseDouble(g.substring(0,g.length()-1))-32)*5/9+"℃";
matcher.appendReplacement(sb,num);
matcher.appendTail(sb);
System.out.println(sb); 和这个处理是一样的, 我只是稍微封装了一下..
浏览: 135498 次
来自: 火星
jbpm4.4处理简单的可以,处理复杂的报错,报错位置trac ...
请问楼主生成的$Proxy0.class文件,在哪个路径下?
wanghaoran 写道给一下这个代码Str ...
这样是不是更简单:String url =Uri u ...
多发点啊打发地方java 中String类方法replaceAll 出现一个小问题
[问题点数:40分,结帖人yuan1597013]
java 中String类方法replaceAll 出现一个小问题
[问题点数:40分,结帖人yuan1597013]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2013年3月 总版技术专家分月排行榜第二
2014年2月 Java大版内专家分月排行榜第一2013年8月 Java大版内专家分月排行榜第一2013年5月 Java大版内专家分月排行榜第一2013年4月 Java大版内专家分月排行榜第一2013年3月 Java大版内专家分月排行榜第一2013年2月 Java大版内专家分月排行榜第一
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。页面导航:
→ 正文内容 JAVA中STRING的常用方法
JAVA中STRING的常用方法小结
这篇文章介绍了JAVA中STRING的常用方法,有需要的朋友可以参考一下
一、创建并初始化一个字符串
String b = "hello";
使用构造方法创建并初始化一个字符串
String();//初始化字符串,表示空字符序列
String(value);//利用已存在的字符串常量创建一个新的对象
String (char[] value);//利用一个字符数组创建一个字符串
String(char[] value,int offset,int count);//截取字符数组offset到count的字符创建一个非空串
String(StringBuffer buffer);//利用StringBuffer对象初始化String对象
二、String类主要方法的使用:
1、获取长度 *.length();//这与数组中的获取长度不同,*.
2、比较字符串(1) equals() //判断内容是否相同
(2)compareTo() //判断字符串的大小关系
(3)compareToIgnoreCase(String int) //在比较时忽略字母大小写
(4)== //判断内容与地址是否相同
(5)equalsIgnoreCase() //忽略大小写的情况下判断内容是否相同
如果想对字符串中的部分内容是否相同进行比较,可以用
(6)reagionMatches() //有两种 public boolean regionMatches(int toffset, String other,int ooffset,int len);表示如果String对象的一个子字符串与参数other的一个子字符串是相同的字符序列,则为true.要比较的String 对象的字符串从索引toffset开始,other的字符串从索引ooffset开始,长度为len。
public boolean reagionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len);//用布尔类型的参数指明两个字符串的比较是否对大小写敏感。
三、查找字符串中某个位置的字符
public char charAt(int index);//返回指定索引index位置上的字符,索引范围从0开始
四、查找指定字符串在字符串中第一次或最后一词出现的位置
在String类中提供了两种查找指定位置的字符串第一次出现的位置的方法
(1)public int indexOf(String str);//从字符串开始检索str,并返回第一次出现的位置,未出现返回-1
(2)public int indexOf(String str,int fromIndex);//从字符串的第fromIndex个字符开始检索str
查找最后一次出现的位置有两种方法
(1)public int lastIndexOf(String str);
(2)public int lastIndexOf(String str,int fromIndex);
如果不关心字符串的确切位置则可使用public boolean contains(CharSequence s);
五、检查字符串的起始字符和结束字符
开始的字符串两种方法
(1)public boolean starWith(String prefix,int toffset);//如果参数prefix表示的字符串序列是该对象从索引toffset处开始的子字符串,则返回true
(2)public boolean starWith(String prefix);
结束的字符串方法
public boolean endsWith(String suffix);
六、截取子串
(1)public String subString(int beginIndex);
(2)public String subString(int beginIndex,int endIndex);//返回的字符串是从beginIndex开始到endIndex-1的串
要返回后4位可以这样写Syetem.out.println(*.subString()(*.length()-4));
七、字符串的替换
(1)public String replace(char oldChar,char newChar);
(2)public String replace(CharSequence target,CharSequence replacement);//把原来的etarget子序列替换为replacement序列,返回新串
(3)public String replaceAll(String regex,String replacement);//用正则表达式实现对字符串的匹配
八、字符串的大小写替转换
(1)public String toLowerCase(Locale locale);
(2)public String toLowerCase();
(3)public String toupperCase(Locale locale);
(4)public String toUpperCase();
九、去除字符串首尾空格
十、字符串转换
1、将字符串转换成字符数组
public char[] toCharArray();
2、将字符串转换成字符串数组
public String[] split(String regex);//regex 是给定的匹配
3、将其它数据类型转化为字符串
(1)public static String valueOf(boolean b);
(2)public static String valueOf(char c);
(3)public static String valueOf(int i);
(4)public static String valueOf(long i);
(5)public static String valueOf(float f);
(6)public static String valueOf(double d);
(7)public static String valueOf(char[] data);
(8)public static String valueOf(Object obj);
可变字符串的创建和初始化
public StringBuffer();
public StringBuffer(int caoacity);
StringBuffer类主要方法的使用:
一、获取可变字符串长度
(1)public int length();
(2)public int capacity();
(3)public void setLength(int newLength);
二、比较可变字符串
用String 类的equals()方法比较,但是不同。
类Object中的equals()方法比较的是两个对象的地址是否相等,而不仅仅是比较内容,但是String类在继承Object类的时候重写了equals()方法,只是比较两个对象的内容是否相等
而在StringBuffer类中没有重写Object类的equals()方法,所以比较的是地址和内容。
三、追加和插入字符串
(1)追加 public StringBuffer append(type t);
(2)插入 public StringBuffer insert(int offset,type t);//在offset处加入类型为type的字符串
四、反转和删除字符串
(1)反转 public StringBuffer reverse();
(2)删除 public StringBuffer delete(int start,int end);
五、减少用于可变字符序列的存储空间
public void trimToSize();
六、StringBuffer类转换成String类
public String toString();
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910replaceAll方法――替换所有匹配的字符串
本文所属图书&>&
本书是一本Java Web综合查询参考手册,介绍了Java Web程序开发中应用的各种常用类及其方法,还包含各种流行框架。本书分为三篇,共14章,第一篇为基础技术篇,主要包括Java语言基础和Ajax必备技术等内容;第二...&&
该方法使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
语法& replaceAll(String regex,String replacement)
regex:用来匹配此字符串的正则表达式。
replacement:用来替换每个匹配项的字符串。
示例& 使用replaceAll()函数将字符串&成功者找方法,&中的内容,修改为&成功者找方法 失败者找理由&。
String str=&成功者找方法 ,&;&&&&&&//定义字符串
str=str.replaceAll(&,&, &失败者找理由&);&&&&//替换字符串中的逗号
System.out.println(str);&&&&&&&//输出返回的字符串
运行本示例,str的输出结果如图1.8所示。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。JAVA中string.replace和string.replaceAll的区别及用法_百度知道
JAVA中string.replace和string.replaceAll的区别及用法
提问者采纳
1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); 2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll(&\\d&, &*&)把一个字符串所有的数字字符都换成星号;
其他类似问题
为您推荐:
replaceall的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 string的replace方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信