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

字符串反转 StringBuffer reverse源码分析

阅读更多

字符串反转是我们经常用到的小算法,一般我们可能会使用String.toCharArray来进行遍历反转,有些繁杂,其实jdk已经为我们封装了字符串反转操作,主要有以下两点需要注意

1. 以中间为轴,O(N/2)的时间复杂度

2. 注意UTF8的补充码,utf8的编码可能会占两个char空间

 

 

public AbstractStringBuilder reverse() {
        boolean hasSurrogate = false;
        int n = count - 1;
        for (int j = (n-1) >> 1; j >= 0; --j) {
            char temp = value[j];
            char temp2 = value[n - j];
            if (!hasSurrogate) {
                hasSurrogate = (temp >= Character.MIN_SURROGATE && temp <= Character.MAX_SURROGATE)
                    || (temp2 >= Character.MIN_SURROGATE && temp2 <= Character.MAX_SURROGATE);
            }
            value[j] = temp2;
            value[n - j] = temp;
        }
        if (hasSurrogate) {
            // Reverse back all valid surrogate pairs
            for (int i = 0; i < count - 1; i++) {
                char c2 = value[i];
                if (Character.isLowSurrogate(c2)) {
                    char c1 = value[i + 1];
                    if (Character.isHighSurrogate(c1)) {
                        value[i++] = c1;
                        value[i] = c2;
                    }
                }
            }
        }
        return this;
    }

 

分享到:
评论

相关推荐

    将字符串反转

    在Java中,可以使用StringBuilder或StringBuffer类的reverse()方法来反转字符串: ```java String strInput = "abcdef"; StringBuilder sb = new StringBuilder(strInput); String strReversed = sb.reverse()....

    将输入的字符串反转 java

    因此,反转字符串通常涉及创建一个新的字符串,该字符串包含原始字符串的反向字符顺序。有多种方法可以实现这个目标,包括使用StringBuilder、StringBuffer、Char数组以及Java 8引入的流(Stream)。 1. 使用...

    《编程珠玑》中的最优性能效率最高字符串反转算法

    如果希望原地修改字符串对象,可以使用StringBuilder或StringBuffer类,这些类提供了reverse()方法,可以直接对字符串进行反转操作,避免了不必要的内存开销。 在实际应用中,字符串反转可能涉及到性能敏感的场景,...

    java 字符串反转

    上述代码首先创建一个`StringBuilder`对象,将输入字符串传递给它,然后调用`reverse()`方法来反转字符串,最后通过`toString()`将其转换回字符串。 如果需要处理多个字符串,我们可以创建一个方法,接收字符串数组...

    将一个字符串反转的方式

    这两个类提供了`reverse()`方法,可以方便地反转字符串。例如: ```java String str = "Hello, World!"; StringBuilder sb = new StringBuilder(str); String reversed = sb.reverse().toString(); ``` `...

    Java 实例 - 字符串反转源代码-详细教程.zip

    这两个类提供了`reverse()`方法,可以方便地反转字符串。`StringBuilder`适合单线程环境,而`StringBuffer`是线程安全的,适用于多线程环境。例如: ```java public class StringReverseExample { public ...

    java实现字符串反转

    Java 中提供了两种内置类可以用来反转字符串,即 StringBuilder 和 StringBuffer。这两种类都提供了 reverse() 方法,可以将字符串反转过来。例如: public static String reverse1(String s) { StringBuffer ...

    java将字符串反转几种方法总结.rar

    `StringBuilder`和`StringBuffer`类提供了内置的`reverse()`方法来轻松地反转字符串。这两个类都是线程安全的,其中`StringBuilder`在单线程环境中效率更高,而`StringBuffer`则适用于多线程环境。以下是一个示例:...

    八种方法倒转字符串暂时

    要利用`CopyMemory`来反转字符串,我们需要先理解字符串在内存中的存储方式,通常是字符数组形式,以空字符'\0'作为结束标识。反转过程就是从后向前遍历字符串,直到遇到'\0',然后用`CopyMemory`从后往前复制到新...

    Java实现的简单字符串反转操作示例

    Java实现的简单字符串反转操作示例 ...Java中的字符串反转操作可以使用多种方法实现,包括遍历逆序输出和使用StringBuffer类的reverse()方法等。同时,Java中的字符串操作技巧非常丰富,需要读者深入学习和实践。

    Java 中的字符串反转.docx

    2. **`StringBuilder` 和 `StringBuffer`**:这两个类提供了在字符串上进行动态操作的能力,它们都包含 `reverse()` 方法,可以用来反转字符串。与 `String` 不同,`StringBuilder` 和 ` StringBuffer` 是可变的,...

    JAVA字符串反转的三种方法

    因此,反转字符串的一个有效方法是通过StringBuilder的`reverse()`方法。以下是一个示例: ```java import java.util.Scanner; public class StrReversal { public static void main(String[] args) { Scanner ...

    java 字符串反转的实例详解

    Java 中的 StringBuffer 类提供了 reverse() 方法,可以用来反转字符串。下面是一个简单的示例代码: ```java String str = "abcde"; String reverseStr = new StringBuffer(str).reverse().toString(); System.out...

    计算机后端-Java-Java核心基础-第21章 常用类 20. StringBuffer的源码分析.avi

    计算机后端-Java-Java核心基础-第21章 常用类 20. StringBuffer的源码分析.avi

    StringBuffer & StringBuilder 源码分析.docx

    StringBuffer & StringBuilder 源码分析 StringBuffer 和 StringBuilder 是 Java 语言中两个常用的字符串操作类,它们都是 CharSequence 接口的实现类,并且都继承了 AbstractStringBuilder 类。下面是对这两个类的...

    String StringBuffer和StringBuilder区别之源码解析

    通过上面的分析,我们可以看到,String类的字符串是不可变的,而StringBuffer和StringBuilder类的字符串可以被修改。StringBuffer类是线程安全的,而StringBuilder类不是线程安全的。 在选择字符串类时,我们需要...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    `reverse()`方法是`StringBuffer`的一个成员方法,用于将字符串的内容反转。例如,`new StringBuffer("hello").reverse().toString()`会返回"olleh"。在处理大量字符串拼接或需要反向操作字符串时,使用`...

    java字符串反转示例分享

    - `StringBuilder`和`StringBuffer`类提供了一些方法,如`reverse()`,可以方便地反转字符串。这两个类的主要区别在于线程安全性,`StringBuffer`是线程安全的,适合多线程环境,而`StringBuilder`则没有这个特性,...

    javascript下高性能字符串连接StringBuffer类

    StringBuffer类专门用于在内存中动态地构建字符串,它内部通过维护一个字符数组来存储字符串片段,并提供append方法来添加新的字符串片段。当需要最终结果字符串时,可以通过toString方法来获取,该方法会将所有存储...

    Java基础之常用类集合,异常、IO文件等基础使用

    例如,需要将字符串 "abc" 反转成 "cba",可以使用 StringBuffer 的 reverse 方法来实现。 最后,我们来讨论 StringBuffer 和 StringBuilder 的区别。StringBuffer 是线程安全的,效率较低,而 StringBuilder 是...

Global site tag (gtag.js) - Google Analytics