`
digyso
  • 浏览: 142161 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

正则表达式,关于String.replaceALL()

阅读更多

原文:http://blog.csdn.net/gqm1982/archive/2007/06/09/1645702.aspx

今天写程序,遇到URI的“/”转换问题,看到String有replaceAll()函数就直接用了,但eclipse却一直报错,也不知道为什么,郁闷了半天。在gg上搜索一下,看了半天,终于明白是正则表达式的问题,下面是我找的解决文章。比较乱,大家耐心看吧。

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 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正则表达式实例教程.pdf

    ### JAVA正则表达式实例教程知识点详述 #### 一、正则表达式的定义与特点 **1.1 正则表达式是什么?** - 正则表达式(Regular Expression)是一种模式匹配语言,用于文本搜索和替换。它提供了一种简洁而灵活的方式...

    JAVA中的正则表达式及其应用.pdf

    * `replaceAll(String regex, String replacement)` : 使用正则表达式替换字符串中的内容 * `split(String regex)` : 使用正则表达式将字符串分割成多个子字符串 2. 使用 java.util.regex 包 java.util.regex 包...

    JAVA正则表达式实例教程.

    JAVA正则表达式实例教程,深入解析正则表达式的应用与实践 正则表达式是计算机科学领域一种强大且灵活的文本处理工具,被广泛应用于数据验证、搜索、替换等场景。本文旨在通过实例深入讲解JAVA中正则表达式的使用...

    JAVA正则表达式实例教程.doc

    【JAVA正则表达式实例教程】 正则表达式在编程领域是一种强大的文本处理工具,尤其在Java中,它被广泛用于字符串的模式匹配和替换。本教程将介绍正则表达式的基本概念、常用符号以及Java中如何使用正则表达式。 1....

    正则表达式及其应用.rar

    `replaceAll()`方法将字符串中所有匹配正则表达式的部分替换为指定的字符串,而`split()`方法根据正则表达式将字符串分割成数组。 例如: ```java public class ReplaceAndSplitExample { public static void ...

    java 正则表达式 Java Regex.rar

    使用`Pattern.compile(String regex)`创建Pattern对象,编译正则表达式。例如: ```java Pattern pattern = Pattern.compile("\\d+"); ``` 编译后,可以多次使用此Pattern对象进行匹配。 4. **匹配和查找** ...

    正则表达式工具类,正则表达式封装,Java正则表达式

    4. `replaceAll(String regex, String replacement, String input)`: 类似于`replaceFirst`,但这个方法会替换所有匹配正则表达式的地方。 5. `split(String regex, String input)`: 此方法根据正则表达式将输入...

    Java正则表达式 Java 正则表达式

    - `Pattern.compile().replaceAll()`:使用正则表达式替换所有匹配的子串。 - `appendReplacement()`:在替换过程中,将匹配的子串替换为指定字符串。 11. **练习应用** - 提取电子邮件地址:可以使用`[\w\.-]+@...

    正则表达式.rar

    本资料压缩包包含了一系列关于Java正则表达式的视频教程,旨在帮助用户深入理解和熟练运用这一技术。 1. **正则表达式简介** - 正则表达式(Regular Expression)是由特殊字符和普通字符组成的模式,用于描述一...

    java_zhengze.rar_正则表达式_正则表达式 java

    文件"www.pudn.com.txt"可能包含了更多关于如何使用正则表达式进行URL、日期、时间等格式验证的例子,以及如何使用`split()`、`replaceAll()`等方法进行字符串分割和替换的示例。 总的来说,Java的正则表达式是处理...

    正则表达式知识示例详解源代码(java版)

    1. **创建Pattern对象**:`Pattern.compile(String regex)`用于编译正则表达式,返回一个`Pattern`对象。 2. **匹配与查找**:`Pattern`对象的`matcher(String input)`方法用于对输入字符串进行匹配,返回一个`...

    正则表达式在Java代码中的使用

    此外,正则表达式还可以用于字符串的替换,Matcher的replaceAll和replaceFirst方法可以将匹配到的部分替换为新的字符串: ```java String result = matcher.replaceAll("X"); ``` 在Java中,正则表达式的性能优化...

    java正则表达式使用例子

    另外,`replaceAll()`方法可以用于替换字符串中匹配正则表达式的所有部分。例如,如果你想移除所有非数字字符,可以这样做: ```java String input = "123abc456"; input = pattern.compile("\\D").replaceAll("", ...

    java 字符串 正则表达式 详细实例代码

    - 常用的正则表达式方法有`matches()`、`find()`、`replaceAll(String replacement)`等。 6. **实例代码** - 下载的压缩包中的"第5章"可能包含了多个关于上述知识点的实例代码,这些代码可以帮助你更好地理解和...

    java正则表达式实例教程

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。本教程将深入讲解Java中的正则表达式,并提供丰富的实例来帮助开发者理解和应用这些概念。 1. 正则...

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

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

Global site tag (gtag.js) - Google Analytics