`
bluceguy
  • 浏览: 6765 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

关于java中replace,replaceFirst,replaceAll的一个问题

阅读更多
在项目中遇到过这么一个问题,一段字符替换的代码:
/**
     * 字符串替换
     */
public static String replaceDoc(String doc, String repDoc)
    {
        return doc.replaceAll (repDoc, "");
    }
/**
     * 测试1
     */
public static void main(String[] args) {

        String a = "a.doc,b.doc,a.doc,";
        String b = "a.doc";
      
        System.out.println(replaceDoc(a, b));

    }
结果:"b.doc,"运行正常

但在投入试运行后,发现这个方法不能正常运行,用户传入参数( a = "a.doc[1],b.doc,a[1].doc,",b = "a[1].doc";)
/**
     * 测试2
     */
public static void main(String[] args) {

        String a = "a.doc[1],b.doc,a[1].doc,";
        String b = "a[1].doc";
      
        System.out.println(replaceDoc(a, b));

    }
结果:"a.doc[1],b.doc,a[1].doc,"


参考了下api,发现

replaceAll(String regex, String replacement)

使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式
的每个子字符串。



replaceFirst(String regex, String replacement)

          使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式
的第一个子字符串。



而“[”、“]”在正则表达式中为


特殊字符
,被保留作特殊用途。

这样,虽然你传递了字符串编译就会没有问题,但是你传的不是正则表达式,到了java虚拟机中之后,

java不认识你传递的表达式,也就不会去替换任何东西,所以执行结果也只能是"a.doc[1],b.doc,a[1].doc,"。

后来我用replace替换了

replaceAll
,问题解决。

分享到:
评论

相关推荐

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

    Java中的`replace`、`replaceAll`和`replaceFirst`是字符串操作中常见的方法,用于替换字符串中的特定子串。它们都是`String`类的方法,但各自有不同的行为和用途。 1. `replace(CharSequence target, CharSequence...

    Java中replace和replaceAll的区别

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

    浅谈Java中replace与replaceAll区别

    Java 中的字符串 replacement 是一个非常重要的知识点,今天我们就来探讨 Java 中的 replace 和 replaceAll 方法之间的区别。 首先, lets Talk about Java 中的 replace 方法。replace 方法有两个重载方法:...

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

    在这里,原始字符串中的每个 `\` 首先被Java解释为一个实际的 `\`,然后 `replaceAll()` 使用的正则表达式中的 `\\` 转义成 `\`,最终在结果字符串中得到 `\\`。 对于替换 `/` 为 `\`,由于 `/` 在正则表达式中不...

    java 替换指定的字符

    3. `replaceFirst(String regex, String replacement)`:这个方法只替换字符串中第一个匹配正则表达式的部分,而不是全部。与`replaceAll()`的区别在于它不是全局替换。 了解了这些方法后,我们来看一个简单的示例...

    java中字符串的操作汇总

    在Java编程语言中,字符串(`String`)是极其重要的一个概念,被广泛应用于各种场景之中。为了更好地理解和运用Java语言,掌握字符串的各种操作方法至关重要。下面将详细介绍Java中字符串的一些关键操作方法及其应用...

    Java面试要点(适用于2年以上经验,1年亦可)

    5. JDK 6 和 JDK 7 中 substring 的原理及区别、replaceFirst、replaceAll、replace 区别 6. String.valueOf 和 Integer.toString 的区别、字符串的不可变性 7. 自动拆装箱 8. Integer 的缓存机制 9. 熟悉 Java 中...

    Java正则表达式规则(技术文档)

    `replaceAll()`和`replaceFirst()`方法用于替换字符串中的内容,其中`replaceAll()`会替换所有匹配的内容,而`replaceFirst()`只替换第一个匹配的内容。 在JavaScript中,RegExp对象提供了六个常用的方法来处理正则...

    JAVA经典语句总结

    只要两个对应位中有一个为1,则结果为1;全为0时,结果为0。 以数字3和6为例: - 数字3的二进制表示为 `0000 0011` - 数字6的二进制表示为 `0000 0110` - 按位与运算的结果为 `0000 0010`,即十进制的2 - ...

    Java的 String 类常用方法大全

    Java 中的 String 类提供了三种方法来实现字符串的替换,分别是 replace、replaceAll 和 replaceFirst。 1. replace 方法 replace 方法将字符串中所有出现的 oldChar 字符串替换为 newChar 字符串。如: String ...

    字符串批量替换小工具(java版)

    标题中的“字符串批量替换小工具(java版)”表明这是一个基于Java编程语言实现的程序,用于处理字符串的批量替换操作。在IT行业中,字符串处理是常见的任务,尤其是在文本处理、数据分析、日志分析等领域。批量替换...

    java 原码 过滤器

    在Java编程语言中,"原码"通常指的是一个程序或函数的原始代码,未经编译或解释的状态。在这个上下文中,"java 原码 过滤器"可能是指一个用于处理文本数据的程序,其目标是过滤掉不适当或不文明的词汇,并用特定符号...

    适合于js和java的正则表达式

    7. **高级用法**:正则表达式还能实现更复杂的操作,如回调函数的使用(JavaScript的`replace()`方法可以接受一个函数作为第二个参数),以及在Java中使用`Matcher`的`group()`方法获取分组信息。 在提供的文件中,...

    字符串处理例子一些相关的java代码

    在 Java 编程中,字符串处理是至关重要的一个部分,因为字符串经常被用来存储和处理文本数据。在 Java 中,字符串被当作对象来处理,而不是像其他一些语言(如 C++)那样作为字符数组。`java.lang.String` 类是 Java...

    Java中String类的方法及说明.pdf

    12. String substring(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串,从beginIndex开始到字符串结束。13. String substring(int beginIndex, int endIndex):返回一个新的字符串,它是此字符串...

    JAVA【第5章:面向对象基础】_String类的常用方法.rar

    在Java编程语言中,面向对象基础是学习Java的基石,而`String`类则是最常用的类之一,几乎在每一个程序中都会见到它的身影。本章节将深入探讨`String`类的常用方法,帮助你更好地理解和运用这个核心组件。 `String`...

    有关Java String常用方法的总结.docx

    `String`类是Java中最基础也是最重要的数据类型之一,在Java中被定义为一个不可变类(immutable class),这意味着一旦一个`String`对象创建之后,其内容就不能再被修改。`String`类提供了丰富的内置方法来操作字符...

    C#和JAVA正则表达式

    例如,我们可以使用`Regex.IsMatch()`来检查一个字符串是否符合特定的模式,`Regex.Match()`和`Regex.Matches()`用于查找单个或多个匹配项,而`Regex.Replace()`则可以用来替换字符串中的匹配部分。C#中的正则表达式...

    Java SE基础.docx

    Java 支持多线程编程,可以在一个进程中同时执行多个线程。 **1. 创建线程** 可以通过实现 `Runnable` 接口或继承 `Thread` 类来创建线程。 ```java public class MyRunnable implements Runnable { @Override ...

    Java程序设计课件:5 数组与字符串_part2.ppt

    `trim()`去除字符串两端的空白字符,`replace(char oldChar, char newChar)`或`replaceFirst(String regex, String replacement)`、`replaceAll(String regex, String replacement)`用于替换字符串中的特定字符或...

Global site tag (gtag.js) - Google Analytics