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

Java源码之StringBuilder的reverse

 
阅读更多

      实现字符串反转,有很多方法,我想递归是可以实现的。我们再来看Java给我们实现的方法,使用的是前半部分和后半部分字符交换的方法(不错,记得在学C的时候,当时老师也是教我们这样做的)。

 

     先看看怎么使用这个方法。

 

 

    public static String reverseStr(String orignalStr){
        StringBuilder sBuffer = new StringBuilder(orignalStr);
        sBuffer.reverse();
        return sBuffer.toString();
    }

 

再看看JDK实现的源码:

 

 

    public AbstractStringBuilder reverse() {
	boolean hasSurrogate = false;
	int n = count - 1;

	for (int j = (n-1) >> 1; j >= 0; --j) {//此处右移一位就是除以2
	    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;
    }

 

其实整个方法并不难看懂;除了StringBuilder外,同样StringBuffer也拥有。这个方法给我的思考是右移的使用,从数电我们可以知道,计算机的乘除法使用的是移位操作来实现的;因此可以看得出,乘除的最基本实现还是来源于移位操作。固然直接使用移位可以提高效率;对于简单的乘除,这个应该作为一种编程习惯。

分享到:
评论

相关推荐

    字符串逆序和排序算法程序java实现源码

    总的来说,这些Java源码提供了一个实践数据结构和算法的好机会,可以帮助初学者更好地理解和应用这些基本概念。无论是字符串逆序还是排序算法,理解其工作原理和实现方式对于提升编程技能和解决实际问题都至关重要。

    简单的一些Java的学习代码 Java代码

    StringBuilder reversed = new StringBuilder(strNum).reverse(); return Integer.parseInt(reversed.toString()); } ``` 以上就是对标题和描述中提到的Java知识点的详细解析。在"我的Java学习代码"这个压缩包...

    Java面试题大全2023版.docx

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

    字符串逆序代码 java python node 等语言代码源码.doc

    Java没有内置的字符串逆序方法,但可以利用`StringBuilder`类的`reverse()`方法来达到目的。`StringBuilder`是一个可变的字符序列,可以方便地进行字符串操作。在Java代码中,我们创建了一个`StringBuilder`对象,将...

    java基础面试题目,常见的几个java面试题目:说一下java类集;JDK 和 JRE 有什么区别

    在 Java 中,可以使用 StringBuilder 或 StringBuffer 类的 reverse() 方法来反转字符串。例如: ```java String str = "hello"; StringBuilder sb = new StringBuilder(str); String reversed = sb.reverse()....

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

    以上内容涵盖了Java编程中的关键知识点,特别是内部类的分类及其特点,以及`StringBuffer`的`reverse()`方法的用法。理解并熟练运用这些概念对于编写高效、清晰的Java代码至关重要。在实际开发中,内部类常用于实现...

    java 123 java

    这里展示了 `toString()` 方法用于将 `StringBuilder` 转换为字符串,`replace()` 方法替换字符串中的子串,以及 `reverse()` 方法反转字符串。 - `UseString` 类中,`str` 变量通过 `substring()` 方法截取子串,...

    JAVA-LAB-ASSIGNMENT.rar_assignment

    通过阅读源码,学生可以学习到如何编写和理解Java程序。 在学习这些Java实验室作业时,学生将深入理解Java语法,包括面向对象的概念、数据类型、字符串操作、数组处理、类和对象的创建,以及基本的算法设计。同时,...

    java经典程序

    在Java中,可以使用StringBuilder或StringBuffer类的reverse()方法来实现这个功能,这对于学习字符串操作和方法调用很有帮助。 多线程是Java的一大特色,它允许程序同时执行多个任务。通过实现Runnable接口或者继承...

    Java的一些工具类

    本篇将深入探讨Java中的工具类及其重要性,结合给定的标签“源码”和“工具”,我们将主要关注标准库中的`java.util`包以及自定义工具类的创建。 `java.util`包是Java标准库的核心部分,包含了大量用于处理集合、...

    短网址服务两种不同算法JAVA实现

    StringBuilder sb = new StringBuilder(); while (id &gt; 0) { int remainder = (int) (id % BASE); id /= BASE; sb.append((char) ('0' + remainder)); } // 倒序排列 return sb.reverse().toString(); } } ...

    在JAVA类中解析GOOGLE MAP地址和反向解析纬经度

    在Java编程环境中,解析Google Map地址以及反向解析经纬度是一项常见的任务,特别是在地理信息系统(GIS)相关的项目中。Google Maps API提供了丰富的功能,包括地址转换(Geocoding)和反向地理编码(Reverse ...

    Java面试题2.docx

    Java 中主要使用 String、StringBuilder 和 StringBuffer 来操作字符串。String 是不可变的,每次修改都会创建新的对象;StringBuilder 和 StringBuffer 是可变的,它们允许在原地修改字符串,效率较高。其中,...

    java基础知识笔记37页.docx

    - **查看方法源码**:`Ctrl+B`可快速跳转到方法的实现代码。 - **调试**: - 设置断点:左键单击所需行号即可。 - 运行断点:右键点击断点所在行,选择`Debug`方法名。 - 使用`F7`键运行Debug。 #### 二、变量...

    api_StringBuffer.zip_fullvgv_java_tasteazi

    这个类位于`java.lang`包中,是线程安全的字符串操作类,与`StringBuilder`类一起提供了对字符串的动态构建。在多线程环境中,`StringBuffer`比直接使用`+`操作符或`StringBuilder`更推荐,因为它的所有方法都是同步...

    将一个字符串反转的方式

    这里我们将深入探讨如何在Java中实现字符串反转,同时也会涉及到字符串的基本原理和一些相关工具的使用。 首先,我们需要理解Java中的字符串。在Java中,字符串是由字符组成的不可变序列,通常表示为`String`类的...

    java几个常见工具类参考

    9. **String**: 不可变的字符序列,是Java中最常用的类之一。包含了许多操作字符串的方法,如连接(`concat()`)、分割(`split()`)、替换(`replace()`)和查找子串(`indexOf()`)。 10. **UUID**: 生成全局唯一...

    字符倒输出

    `StringBuilder`类的`reverse()`方法用于反转字符串。 3. **JavaScript**: ```javascript var s = "hello"; console.log(s.split("").reverse().join("")); ``` 先用`split("")`将字符串拆分为字符数组,再...

    两个面试小程序

    常见的方法有使用StringBuilder或StringBuffer类的reverse()方法,或者通过双指针技巧实现。双指针法是从字符串的两端向中间遍历,交换首尾字符,直到两个指针相遇。这两种方法都有其优劣,前者简洁但不可变,后者...

    文本顺序取反.rar

    2. **Java**:Java中可以使用StringBuilder或StringBuffer类的reverse()方法,如`StringBuilder sb = new StringBuilder("Hello World"); sb.reverse();`,然后将sb.toString()得到的结果就是取反后的字符串。 3. *...

Global site tag (gtag.js) - Google Analytics