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;

}

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

萌萌的IT人

时间: 2024-12-29 09:24:53

Java反转字符串的相关文章

Java反转字符串的方式?

1. 将String转换成字符数组,再利用字符数组进行首尾调换. 2. 利用递归的方式,主要是:reverse(str.substring(1)) + str.charAt(0); 3. 虽然String类没有反转字符串的方法,但是StringBuffer有这个方法,可以借助StringBuffer的这个方法:sb.reverse(); 4. 借助StringBuffer的其他方法,比如:sb.setCharAt(swapIndex,sb.charAt(i)); 再比如:append方法. 5.

Java反转字符串方法

public class ReverseWords { public static String reverseWords(final String original) { String[] array=original.split(" "); if(array.length==0){ return original; } int i=0; for (String string : array){ array[i] = new StringBuilder(string).reverse

【LeetCode-面试算法经典-Java实现】【152-Reverse Words in a String(反转字符串中的单词)】

[152-Reverse Words in a String(反转字符串中的单词)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". 题目大意 给定一个字符串,将其反转,其的字词不转 解题思路

Java中字符串反转

首推方法: public void convertStr(String str){          //将String 对象转换为可改变的StringBuffer类对象          //然后调用StringBuffer类的reverse()方法实现反转          String strReverse=new StringBuffer(str).reverse().toString();          System.out.println(strReverse);       

Leetcode 344:Reverse String 反转字符串(python、java)

Leetcode 344:Reverse String 反转字符串 公众号:爱写bug Write a function that reverses a string. The input string is given as an array of characters char[]. Do not allocate extra space for another array, you must do this by modifying the input array in-place wit

java常见字符串的操作

1 /** 2 * java常见字符串的操作 3 */ 4 public class Test7 { 5 public static void main(String args[]){ 6 StringBuffer sBuffer = new StringBuffer("ABCDEF"); 7 sBuffer.append("abcdef"); 8 sBuffer.append(".123"); 9 sBuffer.append(".4

LeetCode:反转字符串中的元音字母【345】

LeetCode:反转字符串中的元音字母[345] 题目描述 编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leetcode" 输出: "leotcede" 说明:元音字母不包含字母"y". 题目分析 所谓的做题就是把以前背下来的拿过来改一下即可.双指针碰撞模型,之前已经描述过很多次了,此处不在赘述. 知道AEI

Swift和Java关于字符串和字符的比较

1. 字符串字面量 Swift和Java关于字符串操作大同小异. Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量. 字符串字面量是由双引号 ("") 包裹着的具有固定顺序的文本字符集.字符串字面量可以用于为常量和变量提供初始值. 代码如下: let someString = "Some string literal value" 字符串字面量可以包含以下特殊字符: 转义字符\0(空字符).\\(反

Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str="Hello";  推荐这种 使用关键字new  String str1=new String("Hello"); 在内存中开辟2个空间 如图: 源代码 StringDemo01.java 2.String内容的比较 String str="Hello"