Android的开发之&字符串反转(七种方法)

325 阅读1分钟
一:递归
public static String test1(String str){    
    if (!TextUtils.isEmpty(str)){        
        int length= str.length();        
        String left=str.substring(0,length/2);//abcd   ab        
        String right=str.substring(length/2,length); //cd        
        return test1(right)+test1(left);    
    }else{        
        return str;    
    }    
}  

二:拼接字符串
public static String test2(String str){    
    String reverse="";    
    for (int i=0;i<str.length();i++){        
        char ch=str.charAt(i);        
        reverse=ch+reverse;    
    }    
    return reverse;

}

三:使用数组,到序输出
public static String test3(String str){    
    char[] array= str.toCharArray();    
    String reverse="";    
    for (int i=array.length-1;i>=0;i--){        
        reverse+=array[i];    
    }    
    return reverse;
} 

四:使用Stringbuffer内置reverse方法
public static String test4(String str){    
    return new StringBuffer(str).reverse().toString();
} 

五:使用临时变量,交换两头数值
public static String test5(String str){    
    char[] s=str.toCharArray();    
    int n=s.length-1;    
    for (int i=0;i<=n/2;i++){        
        char temp=s[i];        
        s[i]=s[n-i];        
        s[n-i]=temp;    
    }    
    return new String(s);
}

六:使用位移或操作,交换两头数据
public static String test6(String str){    
    char[] s= str.toCharArray();    
    int start=0;    
    int end=str.length()-1;    
    while (start<end){        
        s[start]=(char)(s[start]^s[end]);        
        s[end]=(char)(s[start]^s[end]);        
        s[start]=(char)(s[end]^s[start]);        
        start++;        
        end--;    
    }    
    return new String(s);
}

七:使用栈反转字符串
public static String test7(String str){    
    char[] chars=str.toCharArray();    
    Stack<Character> stack=new Stack<>();    
    for (int i=0;i<chars.length;i++){        
        stack.push(chars[i]);    
    }    
    String reversed="";    
    for (int i=0;i<chars.length;i++){        
        reversed+=stack.pop();    
    }    
    return reversed;
}