码迷,mamicode.com
首页 > 编程语言 > 详细

Java反转字符串

时间:2014-11-30 21:37:45      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:public   字符串   null   java   文章   

       前几天看见一篇文章,说使用Java能用几种方式反转一个字符串。首先要明白什么叫反转字符串,就是将一个字符串到过来啦,比如"倒过来念的是小狗"反转过来就是”狗小是的念来过倒“。接下来就把自己能想到的所有方式记录下来了。

1、第一个念头就是直接使用String类的反转方法,对不起,这样是不行的,因为String类没有这个方法。那么好吧,搞个数组,然后遍历数组,依次调换数组中对应的各个字符。

// 直接使用数组首位调换

public String reverse1(String str) {

if (str == null || str.length() <= 1) {

return str;

}

char[] array = str.toCharArray();

char[] reverseArray = new char[array.length];

for (int i = 0; i < array.length; i++) {

reverseArray[array.length - 1 - i] = array[i];

}

return new String(reverseArray);

}

2、除了上面使用的方法,其实我们还可以使用递归迭代的方法,因为如果只有一个字符的时候,反转一个字符就是它本身。

// 巧妙使用递归的方式

public String reverse2(String str) {

if (str == null || str.length() <= 1) {

return str;

}

return reverse2(str.substring(1)) + str.charAt(0);

}

3、String类没有反转字符串这个方法,但是StringBuffer有这个方法,所以可以先将String转换成StringBuffer,然后利用StringBuffer反转,然后再将反转以后StringBuffer转换成String。这一招可能是最方便的。

public String reverse3(String str) {

if (str == null || str.length() <= 1) {

return str;

}

StringBuffer sb = new StringBuffer(str);

sb = sb.reverse();

return sb.toString();

}

4、除了使用StringBuffer直接的反转方法,我们还可以借助StringBuffer的其他方法完成

 

//这是使用StringBuffer的setCharAt()方法

        public String reverse4(String str) {

if (str == null || str.length() <= 1) {

return str;

}

StringBuffer sb = new StringBuffer(str);

for (int i = 0; i < (str.length() / 2); i++) {

int swapIndex = str.length() - 1 - i;

char swap = sb.charAt(swapIndex);

sb.setCharAt(swapIndex, sb.charAt(i));

sb.setCharAt(i, swap);

}

return sb.toString();

}

 

//这是使用StringBuffer的append()方法,倒序将原来String的字符插入

public String reverse4(String str) {

if (str == null || str.length() <= 1) {

return str;

}

StringBuffer sb = new StringBuffer(str.length());

for (int i = str.length() - 1; i >= 0; i--) {

sb.append(str.charAt(i));

}

return sb.toString();

}

 

5、再仔细想想,反转字符串的过程,就是一次将字符放入一个队列,然后再倒序的依次拿出来,这个恰好和Java的堆栈Stack很像,先进后出。

public String reverse5(String str) {

if (str == null || str.length() <= 1) {

return str;

}

String result = "";

char[] arr = str.toCharArray();

Stack<Character> stack = new Stack<Character>();

for (char a : arr) {

stack.push(a);

}

int length = stack.size();

//注意这个地方,需要先将stack的length记录下来,因为在遍历的过程中,使用stack的pop方法,会改变stack的大小。

for (int i = 0; i < length; i++) {

result += stack.pop();

}

return result;

}

       条条大路通罗马,只要肯思考,肯尝试,我们最终总能找到一中或者多种方式达到我们的目的。希望以后自己在编程的道路上,能够发散思维,寻找到解决各种问题的方法。


bubuko.com,布布扣

萌萌的IT人

Java反转字符串

标签:public   字符串   null   java   文章   

原文地址:http://jlins.blog.51cto.com/4487484/1584800

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!