字符反转以及涉及到的 StringBuilder
来源:互联网 发布:网络安全管理培训 编辑:程序博客网 时间:2024/04/29 23:53
参考链接:http://www.programcreek.com/2014/02/leetcode-reverse-words-in-a-string-java/;
http://blog.csdn.net/ithomer/article/details/7669843#comments;
http://www.wikihow.com/Reverse-the-String-in-Java
反转
反转一个字符串,比如”hello”,反转成为”olleh”,可以使用StringBuilder中的reverse方法,或者递归,或者直接使用for循环。
package com.javaTest;public class Reverse { public static void main(String[] args) { String str = "hi, I am here"; System.out.println("原字符串:"+str); System.out.println("使用reverse:"+reverse(str)+"\n"+"使用append:"+append(str)+"\n"+"使用recurse:"+recurse(str)); } //方法1:使用 StringBuilder 类的 reverse 的方法 public static String reverse(String str){ //str==null 判断引用是否指向任何对象, //str.length<=1,判断引用对象是否为空字符串,或者长度为1的字符串 if((str==null)||(str.length()<=1)){ return str; } StringBuilder builder =new StringBuilder(str); return(builder.reverse().toString()); } //方法2:StringBuilder 的 append 方法 public static String append(String str){ if((str==null)||(str.length()<=1)){ return str; } StringBuilder builder =new StringBuilder(); char [] ch=str.toCharArray(); for(int i=ch.length-1;i>=0;i--){ builder.append(ch[i]); }// 或者直接使用 String 的 charAt() 方法// for(int i=str.length()-1;i>=0;i--){// builder.append(str.charAt(i)); // } return (builder.toString()); } //方法3:recursive function 递归方法 public static String recurse(String str){ if((str==null)||(str.length()<=1)){ return str; } //第一个字符放到最后,前面的继续反转 return recurse(str.substring(1))+str.charAt(0); } }
输出:
当要求的不是每个字符的反转,比如“I am here” 要求返回 “here am I “,用 String 的split 方法分割成数组即可:
package com.javaTest;public class reverseString { public static void main(String[] args) { // TODO Auto-generated method stub String str = "I am here"; System.out.println(reverse(str)); } public static String reverse(String str){ if((str==null)||(str.length()<=1)){ return str; } String [] strArray = str.split(" "); StringBuilder builder = new StringBuilder(); for(int i = strArray.length-1;i>=0;i--){ if(i!=0){ builder.append(strArray[i]+" "); }else { builder.append(strArray[i]); } } return (builder.toString()); }}
StringBuilder
反转过程中涉及到了StringBuilder,看到String、StringBuilder、StringBuffer 用法比较 这篇文章。
String 是字符串常量,StringBuilder 是字符串变量。其主要区别就是 String 是不可变的对象,因此每次对String 进行修改时,都等于生成了一个新的 String 对象,然后指针指向新的String 对象,每次生成对象会对系统性能产生影响。
StringBuilder 是一个类似于 String 的字符串缓冲区,使用StringBuilder()方法时,出事容量为 16 个字节,当内部缓冲区溢出,容量自动增大。它每次对对象本身进行操作,而不是生成新的对象。因此字符串经常改变时最好使用 StringBuilder,主要操作就是 append 和 insert 方法。(ps :StringBuilder 的对象时StringBuilder 类型,要赋值给 String 的话必须要用toString())
StringBuilder 和 StringBuffer
先看 StringBuilder 的 append 方法:
public StringBuilder append(Object obj) { return append(String.valueOf(obj)); } public StringBuilder append(String str) { super.append(str); return this; }
StringBuffer 的append 方法:
public synchronized StringBuffer append(Object obj) { super.append(String.valueOf(obj)); return this; } public synchronized StringBuffer append(String str) { super.append(str); return this; }
可以看到StringBuffer 有Synchronized 关键字修饰,可以起到同步的作用。因此StringBuffer 是线程安全的,可以在多线程环境使用。为此付出的代价就是降低了执行效率。StringBuilder 非线程安全,由于不支持同步,所以速度会比 StringBuffer 更快。因此,如果在多线程环境可以使用StringBuffer进行字符串连接操作,单线程环境使用StringBuilder,它的效率更高。
- 字符反转以及涉及到的 StringBuilder
- 实验StringBuilder类实现字符反转
- ioc以及Aop涉及到的设计模式
- Spring依赖注入/控制反转的四种方式以及特殊字符的注入
- StringBuffer以及StringBuilder的使用
- ASCII码排序--涉及到从控制台读取字符的处理
- 用shell编写的简单密码加密程序,涉及到ASCII与字符的相互转换,以及命令结果输出到变量
- 用shell编写的简单密码加密程序,涉及到ASCII与字符的相互转换,以及命令结果输出到变量
- StringBuilder类的常用方法 增删改查、反转、互转
- View的生命周期以及涉及到内存警告的问题
- struts2 登录拦截,以及涉及到的session的方法
- 关于Django的配置思路以及涉及到的知识
- 字符反转
- 字符反转
- 字符反转
- 反转字符
- 字符反转
- 字符反转
- python 中需要注意的地方
- ClassLoader与System学习笔记
- 挣值分析
- Min Stack
- 解决oracle语句中 含数字的字符串按数字排序问题
- 字符反转以及涉及到的 StringBuilder
- uva 10534 Wavio Sequence nlogn方法
- beaglebone black接入ds18b20并通过网络上传数据
- 中国银联对圈存脚本及冲正机制的建议
- AndroidStudio创建TV-APP,出现Error:(28, 13) Failed to resolve: com.squareup.picasso:picasso:2.5.0 的解决
- Linux下ELF共享库使用摘记
- DynamicQueryable基于Linq的动态查询
- 我的電腦服務器版和本地版
- format函数