字符串反转是我们经常用到的小算法,一般我们可能会使用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-Java核心基础-第21章 常用类 20. StringBuffer的源码分析.avi
主要介绍了Java实现的简单字符串反转操作,结合实例形式分别描述了java遍历逆序输出以及使用StringBuffer类的reverse()方法两种字符串反转操作技巧,需要的朋友可以参考下
StringBuffer & StringBuilder 源码分析.docx
字符串String StringBuffer StringBuilder
java字符串三种处理方式区别String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)
// 把字符串反转 int count = 0; for (int i = 0; i (); i++) { if (str.charAt(i) == sb.charAt(i)) { count++; //统计相同字符的个数 } } if (count == str.length()) { return true; } else {
(6)、append() 可把任何类型数据的字符串表示连接到调用的StringBuffer对象的末尾。 例:int a=42; StringBuffer sb=new StringBuffer(40); String s=sb.append("a=").append(a).append("!").toString();...
主要针对Java中两个常用的操作字符串的类 StringBuilder和StringBuffer进行源码分析,感兴趣的小伙伴们可以参考一下
java JAVA数组与字符串,编写图形界面的程序,接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印新生成的字符串。 String 类或StringBuffer类 deleteCharAt方法
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候...
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
java接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印新生成的字符串。
使用StringBuffer类比使用加号节省50%左右的时间,大家对于大数据的连接最好使用这个方法。
JAVA精华 String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。
面试题(测试工程师的面试题): ...如果当前的字符串不是” “,就一直添加到一个StringBuffer中,如果遍历到了空格,就说明单词结束了,就将这个单的StringBuffer添加到一个List中,并且把这个StringBuffer置空
主要给大家介绍了关于JDK源码分析之String、StringBuilder和StringBuffer的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用jdk具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
String:字符串常量 StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段...
Java中将字符串作为String类型对象来处理。当创建一个String对象时,被创建的字符串是不能...对于那些想得到改变的字符串的情况,有一个叫做StringBuffer的String类的友类,它的对象包含了在创建之后可以改变的字符串。
String ,StringBuffer与StringBuilder的区别
关于字符串去重的代码, 仅保留第一次出现的字符,且去重后的字符串与原字符串顺序不变 涉及到集合ArrayList与StringBuffer可变字符串的使用