`

java String类replace方法源码分析

    博客分类:
  • java
阅读更多
    public String replace(char oldChar, char newChar) {
        if (oldChar != newChar) 
        {
            int len = value.length;//value就是一个数组,这里得到string字符串的长度
            int i = -1;
            char[] val = value; /* avoid getfield opcode */

            while (++i < len)      //先确保字符串中有旧的字符
            {
                if (val[i] == oldChar) 
                {break;}
            }

            if (i < len) 
            {
                char buf[] = new char[len];
                for (int j = 0; j < i; j++) 
                {
                    buf[j] = val[j];
                }
                while (i < len) {
                    char c = val[i];
                    buf[i] = (c == oldChar) ? newChar : c;
                    i++;
                }
                return new String(buf, true);
            }
        }
        return this;
    }

 使用方法举例:  string.replace('e','o')        将string字符串中所有的e转换为o

这段代码的精髓之处:1.为了程序更快,所以才先确保原来的字符串中有旧的字符,不然会白白循环很多次

                                 2.找到后,创建一个新的字符串buf,长度和原字符串一样,再用while循环替换所有的旧字符.

 

我们来分析一下这样做的效率提升:

如果不判断字符串是否有旧字符,直接执行

 while (i < len)

{
                    char c = val[i];
                    buf[i] = (c == oldChar) ? newChar : c;
                    i++;
}

有n个字符,每个字符要执行判断的次数为: while语句1次,char c赋值1次,c==oldChar判断1次,赋值给buf[i] 1次

i++ 1次,所以总操作数为  5n

 

而先判断有旧字符再while循环,找到旧字符前每个字符只要执行3次操作,明显提升了程序效率

(具体操作次数,新手入门,可能会有纰漏,恳请指正)

分享到:
评论

相关推荐

    java中的String类常用方法解析(一)

    以上就是`String`类的一些常见方法,理解并熟练使用它们对于提升Java编程效率至关重要。在实际开发中,开发者通常会结合这些方法来处理字符串,实现各种文本操作。通过阅读和分析`TestString.java`文件,我们可以...

    Java字符串替换函数replace()用法解析

    在Java编程语言中,`String`类提供了多种方法来处理字符串,其中之一便是`replace()`方法。这个方法主要用于在字符串中替换指定的字符或子串,返回一个新的字符串,原字符串不会被改变,因为Java中的字符串是不可变...

    java源码整理包

    在Java编程语言中,源码是程序的基本组成单元,它由程序员编写,包含了类、方法、变量以及其他元素的定义。"java源码整理包"是一个集合,包含了与字符串(String)、日期(Date)、数据格式化(DataFormat)、数组(Array)...

    java常用类库源码

    9. **字符串处理**:String类是Java中最常用的类之一,源码解析可以帮助我们理解字符串的不可变性、substring、replace等方法的实现。 10. **枚举和注解**:Java枚举提供了一种安全的常量表示,而注解则提供了一种...

    String_raw-源码.rar

    这个“String_raw-源码.rar”文件很可能包含了Java标准库中`String`类的原始源代码,这对于深入理解`String`类的工作原理非常有帮助。在这里,我们将深入探讨`String`类的一些关键知识点。 1. **字符串常量池**:在...

    java String详解

    `String`源码分析 深入理解`String`源码可以揭示更多细节,例如`char[]`数组的使用、不可变性的实现以及字符串操作的效率优化。`String`类在JDK的源码中是用C++实现的,但其主要接口和方法都是在Java中定义和使用的...

    java String 可变性的分析

    《Java String 可变性的分析》 在Java编程语言中,String对象的不可变性是一个核心概念,也是面试中常见的问题。通常我们认为,一旦创建了一个String对象,其内容就不能更改。然而,通过深入源码,我们可以揭示...

    Java课程设计实验源码.rar

    10. **字符串处理**:Java的String类提供了丰富的操作字符串的方法,如substring、indexOf、replace等,这些在处理用户输入和数据显示时会频繁用到。 通过这些项目,学习者不仅能掌握Java编程的基本技能,还能锻炼...

    java自定义类加载classloader文档,包括代码

    ### Java自定义类加载器(Class Loader)详解 #### 一、引言 在Java语言中,类加载机制是其动态特性的核心之一。通过类加载器(Class Loader),Java程序能够在运行时根据需要加载所需的类,从而实现高度的灵活性...

    Java练习字符串课题的源码

    在Java中,字符串被表示为`String`类的对象,该类位于`java.lang`包中,这意味着它在每个Java程序中都是默认可用的。字符串对象是不可变的,意味着一旦创建,其内容就不能更改。下面我们将深入探讨一些关于Java字符...

    java记事本程序源码

    4. **字符串处理**:在查找和替换功能中,Java的`String`类及其方法(如indexOf、replace、substring等)被广泛使用。此外,正则表达式(Pattern和Matcher类)可以用于复杂文本匹配。 5. **多线程**:如果程序需要...

    Java面试题大全2023版.docx

    JDK 包含了 JRE,同时还包含了编译 Java 源码的编译器 javac,还包含了很多 Java 程序调试和分析的工具。如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。 2. == 和 ...

    core java 视频源码

    5. **第10章** - 这章可能涉及字符串(String)类的使用,包括字符串的创建、操作(如concatenation、substring、replace等)以及字符串池的概念。 6. **第11章** - 可能会讲解文件和I/O流。Java的I/O流允许程序进行...

    java学习源码,很好的资料,很全的资料

    ### Java学习源码知识点概述 #### 一、读写文件操作 在Java中,进行文件的读取与写入是一项非常基础且重要的功能。这部分代码示例提供了如何使用`java.io`包中的类来实现这一功能的具体实现。 ##### 1.1 文件读取 ...

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

    在Java中,进行字符串替换通常会用到`String`类的方法,如`replace()`、`replaceAll()`或`replaceFirst()`。这些方法各有其特点和适用场景,例如`replace()`只替换首次出现的目标字符串,而`replaceAll()`和`...

    java经典四十题及源码

    7. **字符串处理**:String类在Java中非常常用,学习者需要熟悉字符串的不可变性,以及substring()、replace()、indexOf()等方法的用法。 8. **泛型**:泛型是Java SE 5.0引入的新特性,允许在类、接口和方法中使用...

    java6string源码-OpenGrok:开槽叉

    对于Java 6 `String`源码的分析,`OpenGrok`提供了一个理想的工作平台,帮助我们更好地理解和学习`String`类的内部机制。 1. **构造方法**:`String`类有多种构造方法,包括空字符串的构造、通过字符数组构造、通过...

    Java实训书资料--- java程序源代码

    8. **字符串处理**:Java的String类提供了丰富的字符串操作方法,如concatenation、substring、indexOf、replace等。源码中会展示如何高效地处理字符串。 9. **文件和目录操作**:Java的File类允许对文件和目录进行...

Global site tag (gtag.js) - Google Analytics