5中方式实现String反转

这里介绍Java中5中实现String反转的方式。

一、数组实现String反转

//数组实现String反转
    public String reverseByArray(){
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for(int i = 0 ; i < ch.length/2 ; i++){
            char temp = ch[i];
            ch[i] = ch[ch.length-i-1];
            ch[ch.length-i-1] = temp;
        }
        return new String(ch);
    }  

二、栈实现String反转

//用栈实现String反转
    public String reverseByStack(){
        if(str == null || str.length() == 1){
            return null;
        }
        Stack<Character> stack = new Stack<Character>();
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for (char c : ch) {
            stack.push(c);//每个字符,推进栈
        }
        for (int i = 0; i < ch.length; i++) {
            ch[i] = stack.pop();//移除这个堆栈的顶部对象
        }
        return new String(ch);
    }  

三、逆序遍历实现String反转

//用逆序遍历实现String反转

    public String reverseBySort(){
        if(str == null || str.length() == 1){
            return null;
        }
        StringBuffer sb = new StringBuffer();
        for (int i = str.length() -1 ; i >= 0; i--) {
            sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
        }
        return sb.toString();
    }

四、位运算实现String反转

//使用位运算实现String反转
    public String reverseByBit() {
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        int len = str.length();
        for(int i= 0; i< len/ 2; i++) {
            ch[i]^= ch[len- 1- i];
            ch[len- 1- i]^= ch[i];
            ch[i]^= ch[len- 1- i];
        }
        return new String(ch);
    }  

五、递归实现String反转

//使用递归实现String反转
    public String reverseByRecursive(String str){
        if(str == null || str.length() == 0){
            return null;
        }
        if(str.length() == 1){
            return str;
        } else {
            //从下标为1开始截取字符串,在返回下标为0的字符
            return reverseByRecursive(str.substring(1)) + str.charAt(0);
        }
    }  

六、测试

public class Test {
    public static void main(String[] args) {
        String s = "123456";
        Reverse r = new Reverse(s);
        System.out.println(r.reverseByArray());
        System.out.println(r.reverseByStack());
        System.out.println(r.reverseBySort());
        System.out.println(r.reverseByBit());
        System.out.println(r.reverseByRecursive(s));

    }
} 

七、结果

八、用于String反转的全部代码

public class Reverse {
    private String str = null;

    public Reverse(String str){
        this.str = str;
    }

    //数组实现String反转
    public String reverseByArray(){
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for(int i = 0 ; i < ch.length/2 ; i++){
            char temp = ch[i];
            ch[i] = ch[ch.length-i-1];
            ch[ch.length-i-1] = temp;
        }
        return new String(ch);
    }
    //用栈实现String反转
    public String reverseByStack(){
        if(str == null || str.length() == 1){
            return null;
        }
        Stack<Character> stack = new Stack<Character>();
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for (char c : ch) {
            stack.push(c);//每个字符,推进栈
        }
        for (int i = 0; i < ch.length; i++) {
            ch[i] = stack.pop();//移除这个堆栈的顶部对象
        }
        return new String(ch);
    }
    //用逆序遍历实现String反转
    public String reverseBySort(){
        if(str == null || str.length() == 1){
            return null;
        }
        StringBuffer sb = new StringBuffer();
        for (int i = str.length() -1 ; i >= 0; i--) {
            sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
        }
        return sb.toString();
    }
    //使用位运算实现String反转
    public String reverseByBit() {
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        int len = str.length();
        for(int i= 0; i< len/ 2; i++) {
            ch[i]^= ch[len- 1- i];
            ch[len- 1- i]^= ch[i];
            ch[i]^= ch[len- 1- i];
        }
        return new String(ch);
    }
    //使用递归实现String反转
    public String reverseByRecursive(String str){
        if(str == null || str.length() == 0){
            return null;
        }
        if(str.length() == 1){
            return str;
        } else {
            //从下标为1开始截取字符串,在返回下标为0的字符
            return reverseByRecursive(str.substring(1)) + str.charAt(0);
        }
    }
}   

全部代码

时间: 2024-10-10 21:20:59

5中方式实现String反转的相关文章

【shiro】UsernamePasswordToken中char[]替代String的安全性

shiro中UsernamePasswordToken类的源码中有一段注释很有意思. * <p>Note that this class stores a password as a char[] instead of a String * (which may seem more logical). This is because Strings are immutable and their * internal value cannot be overwritten - meaning

07_Android操作sqllite数据库(包括2中方式操作数据的方式),单元测试,BaseAdapter的使用,自定义view的综合使用案例

?? 1 目标从sqllite中读取数据并显示如下: MainActivity对应的界面 MainActivity2对应的界面 2  配置Android的清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima2

java中特殊的String类型

Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第一种先在栈中创建一个对String类的对象引用变量s,然后去查找"abc"是否被保存在字符串常量池中,如果没有则在栈中创建三个char型的值 'a'.'b'.'c',然后在堆中创建一个String对象object,它的值是刚才在栈中创建的三个char型值组成的数组{'a'.'b'. 'c'

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中特殊的String类型

Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第一种先在栈中创建一个对String类的对象引用变量s,然后去查找"abc"是否被保存在字符串常量池中,如果没有则在栈中创建三个char型的值'a'.'b'.'c',然后在堆中创建一个String对象object,它的值是刚才在栈中创建的三个char型值组成的数组{'a'.'b'.'c'},

JAVA中int、String的类型转换

int -> String int i=12345;String s="";第一种方法:s=i+"";第二种方法:s=String.valueOf(i);这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? String -> int s="12345";int i;第一种方法:i=Integer.parseInt(s);第二种方法:i=Integer.valueOf(s).intValue();这两种方法有什么区别

java中如何将string 转化成long

1.Java中如何将string 转化成long long l = Long.parseLong([String]); 或 long l = Long.parseLong([String],[int radix]); long l = Long.valueOf("123").longValue(); 2.Long.ValueOf("String")与Long.parseLong("String")的区别 Long.ValueOf("St

Java中如何将String转成Date

Java中如何将String转成Date 最近在开发Json数据反序列化为Java对象的时候发现spring mvc 和 Jackson 对Date类型对支持不是特别好,虽然在Java对象序列化为Json数据的过程中提供了便利的注解,但是反序列化却没有,于是就引出了下面的问题,我需要手工的将字符串转换为Date类型的数据,java.text.SimpleDateFormat 为我们提供了这种转换的基础设施.如下列出了的格式化模式的简单定义,如果 ‘M’ 大于等于3位, 月份会显示为字母,否则是数

json格式数据2中方式解析实例

json格式数据2中方式解析实例 json是移动平台上非常常用的数据传输格式,本示例提供了两种Json格式文件生成与解析的方式.第一种通过JsonReader和JsonWriter两个对象进行json文件的读写操作,需要sdk在11以上.第二种通过JSONArray.JSONObject.JSONTokener等对象进行json读写操作,需要sdk在9以上.这种方式也可通过引入jar包的方式在其他版本的sdk中实现.启动客户端后,先点击写入json按钮(第1或3个按钮)生成Json文件(位置为s