Java反转字符串_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java反转字符串

Java反转字符串

 2014/11/30 21:26:20  dyy_gusi  程序员俱乐部  我要评论(0)
  • 摘要:前几天看见一篇文章,说使用Java能用几种方式反转一个字符串。首先要明白什么叫反转字符串,就是将一个字符串到过来啦,比如"倒过来念的是小狗"反转过来就是”狗小是的念来过倒“。接下来就把自己能想到的所有方式记录下来了。1、第一个念头就是直接使用String类的反转方法,对不起,这样是不行的,因为String类没有这个方法。那么好吧,搞个数组,然后遍历数组,依次调换数组中对应的各个字符。//直接使用数组首位调换publicStringreverse1(Stringstr){if(str==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;

}

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

发表评论
用户名: 匿名