`
shinestarwang
  • 浏览: 41781 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java replaceall

阅读更多
转自:http://www.blogjava.net/hill/archive/2009/04/29/268065.html

关键字: java replaceall 用法
Java代码
public class TryDotRegEx {   
public static void main(String[] args) {   
// TODO Auto-generated method stub   
String str = "111.3.22.11";   
str=str.replaceAll("(^|\\.)(\\d)(\\.|$)","$100$2$3");   
str=str.replaceAll("(^|\\.)(\\d{2})(\\.|$)","$10$2$3");   
str=str.replaceAll("(^|\\.)(\\d{2})(\\.|$)","$10$2$3");   
str=str.replaceAll("(^|\\.)(\\d{1})(\\.|$)","$100$2$3");   
           
System.out.println(str);   
}   
  
}  
public class TryDotRegEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "111.3.22.11";
str=str.replaceAll("(^|\\.)(\\d)(\\.|$)","$100$2$3");
str=str.replaceAll("(^|\\.)(\\d{2})(\\.|$)","$10$2$3");
str=str.replaceAll("(^|\\.)(\\d{2})(\\.|$)","$10$2$3");
str=str.replaceAll("(^|\\.)(\\d{1})(\\.|$)","$100$2$3");
System.out.println(str);
}
}


打印结果:111,003,022,011;

正则表达式,关于String.replaceALL(..)
Java代码
class t1 {   
       public static void main(String a[]) {   
         String s = 'E:\jbx\x9\io9';   
         String ss;   
//把路径s中的'\'换为'\\',为何还要整8个'\'?我以为4个就行了。   
         ss = s.replaceAll('\\\\', '\\\\\\\\')   
         System.out.println('s= ' + s);   
         System.out.println('ss=' + ss);   
//output:     
//s= E:\jbx\x9\io9   
//ss=E:\\jbx\\x9\\io9   
       }   
}  
class t1 {
public static void main(String a[]) {
String s = 'E:\\jbx\\x9\\io9';
String ss;
//把路径s中的'\'换为'\\',为何还要整8个'\'?我以为4个就行了。
ss = s.replaceAll('\\\\', '\\\\\\\\')
System.out.println('s= ' + s);
System.out.println('ss=' + ss);
//output:
//s= E:\jbx\x9\io9
//ss=E:\\jbx\\x9\\io9
}
}


这里的关键是String.replaceAll()是用regular expression 来作为参数的。但是java本身的字符串对于转义符\也有类似的处理。首先,java会把“\\\\”解释成一个字符串(其中包含两个char)——“\ \”这个就是你在JDK的文档里看到的。
接下来,由于replaceAll是以正则表达式作为参数,所以“\\”被解释成一个regex。对于一个regex来说这就代表着一个字符,就是“\”。对后面的那个8个\来说,最终会被解释成“\\”。

换言之,假设String.replaceAll()是以普通字符串,而不是regex作为参数,那么这样写代码: String target = source.replaceAll('\\', '\\\\'); 就可以了。

===============================
在replaceAll(String,String)方法中需要特殊处理英文状态的括号,在网上找了一下,可以使用下面的写法将英文括号替换成其他字符(比如中文全角括号):str1.replaceAll("\\(","(");

Java String replaceAll and regex
在java中要将一个字符串的中$符号去除。我是这样写的:
String tmp = "-$125402.00";
tmp.replaceAll("$","");
可是执行去来的结果并没有把$去除。后来找资料才发现要这样写
tmp.replaceAll("\\$","")才可以。
String replaceAll(String regex, String replacement)中的两个参数都是regex。尤其是当第二个参数replacement是用户输入或指定的字符串时,如果其中包含regex特殊字符(主要是\和$)而不加注意,就容易导致问题引发异常。这种情况下如果只是简单的字符串替换而无需regex引擎参与的话,就不要用 replaceAll好了。JDK1.5中加入了String replace(CharSequence target, CharSequence replacement),可以用它。JDK1.4或以下,自己搞一个好了,如oldReplace:http://www.javapractices.com/Topic80.cjp
    
我在写程序的时候,需要将"\"字符写入一个文本文件,开始以为这不是个什么问题,转换一下就好了嘛,代码如下:

targetPath = targetPath.replaceAll("\\", "\\\\");
fileOperate.createFile(fileName, targetPath);


原以为没有问题,这样就可以先在读入的字符串中把"\"转换为"\\",然后在写入文本文件时就会写成"\",没想到,报如下错误:

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\

回来查了资料才发现,java的replaceAll函数,使用的是正则表达式作为转换依据,而"\"在正则表达式中也是特殊字符,最后,写成下面的代码才达到了我预想的目的:

targetPath = targetPath.replaceAll("\\\\", "\\\\\\\\");
fileOperate.createFile(fileName, targetPath);



=====================================

replace和replaceAll方法的区别:

主要就是后者是基于规则表达多的替换,而前者是一般的基于字符或字符序列本身的替换。

比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号,replace就做不到,因为它不是基于规则表达多的替换。
分享到:
评论

相关推荐

    Java中replace、replaceAll和replaceFirst函数的用法小结

    相信会java的同学估计都用过replace、replaceAll、replaceFirst这三个函数,可是,我们真的懂他们吗?下面通过这篇文章大家再来好好学习学习下这几个函数。

    Java replaceAll()方法报错Illegal group reference的解决办法

    主要给大家介绍了关于Java replaceAll()方法报错Illegal group reference的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    浅谈Java中replace与replaceAll区别

    主要介绍了Java中replace与replaceAll区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java正则表达式如何匹配特定html标签内的内容

    主要给大家介绍了关于Java正则表达式如何匹配特定html标签内的内容的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java中replace和replaceAll的区别

    replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是:  1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也是字符串);  2)...

    replaceAll()如何同时替换多个不同的字符串(或多个符号)

    Java中的replaceAll()方法怎么才能同时替换多个不同的字符串呢? 正好我遇到过这个情况,就跟她分享了一下心得,解决问题后的她开心的像刚充完气儿一样。 这让我颇感欣慰,在这里我也分享给大家。 需求场景 场景1: ...

    replaceall.java

    数据结构 二叉树 替换子树replaceAll \***********************************************************************************************/

    java替换html特殊字符工具类

    htmlStr =htmlStr.replaceAll("∀", "∀"); htmlStr =htmlStr.replaceAll("∂", "∂"); htmlStr =htmlStr.replaceAll("&exists;", "∃"); htmlStr =htmlStr.replaceAll("∅", "∅"); htmlStr...

    java 日志的数据脱敏的实现方法

    今日给大家介绍一下java 日志的数据脱敏的实现方法,可以更好的保护数据的安全,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    浅谈java中replace()和replaceAll()的区别

    主要介绍了java中replace()和replaceAll()的区别,两者都是常用的替换字符的方法,感兴趣的小伙伴们可以参考一下

    java正则表达式,十分有用的正则表达式

    众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一...

    Java 中 过滤Html标签

    使用这个正则表达式,我们可以使用Java的Pattern和Matcher类来删除script标签。 同样,我们可以定义style标签和html标签的正则表达式,分别如下: `String regEx_style = "<[//s]*?style[^>]*?>[//s//S]*?<[//s]*?...

    java金额转大写

    /** * 返回关于钱的中文式大写数字,支仅持到亿 * */ public static String ... .replaceAll("零+亿", "亿").replaceAll("零+万", "万") .replaceAll("零+元", "元").replaceAll("零+", "零"); }

    JAVA正则表达式4种常用功能

    JAVA中可以使用`replaceAll()`方法来实现正则表达式的替换功能。下面是一个简单的代码示例: ```java String regEx = "a+"; // 表示一个或多个 a String str = "aaabbced a ccdeaa"; Pattern p = Pattern.compile...

    java校验密码重复的代码

    public static boolean validatePassword(String str) ... if(str.replaceAll(str.substring(0,i+1), "").length()==0){ return false; } } return true; } return false; }

    Java正则表达式的总结和一些小例子

    * String replaceAll(String replacement):用给定的 replacement 全部替代匹配的部分。 * String replaceFirst(String replacement):用给定的 replacement 替代第一次匹配的部分。 * Matcher appendReplacement...

    java正则表达式 过滤特殊字符的正则表达式

    Java 正则表达式过滤特殊字符的正则表达式 Java 正则表达式是 Java 语言中的一种强大的文本处理工具,能够对字符串进行复杂的匹配、提取和替换操作。本文将详细介绍 Java 正则表达式在过滤特殊字符方面的应用。 ...

    java类所在工程路源代码

    java类所在工程路源代码String path=this.getClass().getResource("/").getPath(); xmlpath=xmlpath.replaceAll( "%20"," ");

    java 爬网 程序 示例

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; public class GetNetHtml { public ...

    JAVA解惑.pdf

    Java 谜题 谜题 20:我的类是什么? 下面的程序被设计用来打印它的类文件的名称。如果你不熟悉类字面常量,那么 我告诉你 Me.class.getName()将返回 Me 类完整的名称,即 “com.javapuzzlers.Me”。那么,这个程序...

Global site tag (gtag.js) - Google Analytics