Java_Exercise 字符串逆序(转自https://blog.youkuaiyun.com/m0_37961948/article/details/72235216)

java笔试中字符串翻转的几种方法(java---华为----字符逆序)

2017年05月16日 06:49:05 过道 阅读数:15332

1.调用reverse() 方法实现翻转

 
  1. public static String reversel1(String str){

  2. return new StringBuffer(str).reverse().toString();

  3. }

通过new一个新的 StringBuffer 调用自带方法

2.通过字符串数组实现从尾部开始逐个逆序放入字符串中

 
  1. public static String reverse2(String s)

  2. {

  3. char[] array = s.toCharArray(); //String转字符数组

  4. StringBuilder reverse = new StringBuilder(); // 使用StringBuilder,更快。

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

  6. reverse.append(array[i]);

  7. }

  8. return reverse.toString();

  9. }

  10.  

3.通过字符串数组实现从头部开始逐个正序放入字符串中

 
  1. public static String reverse3(String s)

  2. {

  3. int length = s.length();

  4. String reverse = ""; //注意这是空串,不是null

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

  7. reverse = s.charAt(i) + reverse;//在字符串前面连接, 而非常见的后面

  8. //即String="reverse",

  9. // 放入时会"e";"s";"r";"e";"v";"e";"r";的放入String。charAt(i++)

  10. //从尾到头正序放入

  11. }

  12. return reverse;

  13. }

  14.  

4.C语言中常用的方法:

 
  1. public static String reverse5(String orig)

  2. {

  3. char[] s = orig.toCharArray();

  4. int n = s.length - 1;

  5. int halfLength = n / 2;

  6. for (int i = 0; i <= halfLength; i++) {

  7. char temp = s[i];

  8. s[i] = s[n - i];

  9. s[n - i] = temp;

  10. }

  11. return new String(s); //知道 char数组和String相互转化

  12. }

5.利用栈的先入后出的特性实现字符串的逆转

 
  1. public static String reverse5(String string) {

  2. StringBuilder sb = new StringBuilder();

  3. Stack<Character> s = new Stack<Character>();

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

  5. s.add(string.charAt(i));

  6. }

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

  8. sb.append(s.pop());

  9. }

  10. return sb.toString();

  11. }

6.通过二位进制的右移,也就是/2,实现。与方法4异曲同工

 
  1. public static String reverse6(String string) {

  2. StringBuffer sb = new StringBuffer(string);

  3. for (int i = 0, j = sb.length() - 1; i < sb.length() >>> 1; i++, j--) {

  4. char temp = sb.charAt(i);

  5. sb.setCharAt(i, sb.charAt(j));

  6. sb.setCharAt(j, temp);

  7. }

  8. return sb.toString();

  9. }

 

所有翻转的源码

 
  1. import java.util.Scanner;

  2. import java.util.Stack;

  3.  
  4. public class Main {

  5. public static void main(String[] args) {

  6. Scanner sc = new Scanner(System.in);

  7. while (sc.hasNext()) {

  8. String str = sc.nextLine();

  9.  
  10. // 逆序翻转

  11. System.out.println(reverse1(str));

  12.  
  13. }

  14. }

  15.  
  16. public static String reverse1(String str) {

  17. return new StringBuffer(str).reverse().toString();

  18. }

  19.  
  20. public static String reverse2(String s) {

  21. char[] array = s.toCharArray(); // String转字符数组

  22. String reverse = ""; // 注意这是空串,不是null

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

  24. reverse += array[i];

  25. // 即String="reverse",

  26. // 放入时会"r";"e";"v";"e";"r";"s";"e";的放入String.charAt(String.charAt(length--))

  27. }

  28. return reverse;

  29. }

  30.  
  31. public static String reverse3(String s) {

  32. int length = s.length();

  33. String reverse = ""; // 注意这是空串,不是null

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

  36. reverse = s.charAt(i) + reverse;// 在字符串前面连接, 而非常见的后面

  37. // 即String="reverse",

  38. // 放入时会"e";"s";"r";"e";"v";"e";"r";的放入String。charAt(i++)

  39. // 从尾到头正序放入

  40. }

  41. return reverse;

  42. }

  43.  
  44. public static String reverse4(String orig) {

  45. char[] s = orig.toCharArray();

  46. int n = s.length - 1;

  47. int halfLength = n / 2;

  48. for (int i = 0; i <= halfLength; i++) {

  49. char temp = s[i];

  50. s[i] = s[n - i];

  51. s[n - i] = temp;

  52. }

  53. return new String(s); // 知道 char数组和String相互转化

  54. }

  55.  
  56. public static String reverse5(String string) {

  57. StringBuffer sb = new StringBuffer();

  58. Stack<Character> s = new Stack<Character>(); // new一个栈

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

  60. s.add(string.charAt(i));

  61. // 往栈中逐个正序放入字符型string.charAt(i++);

  62. }

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

  64. sb.append(s.pop());

  65. // 栈取出的顺序与放入的顺序相反,所以实现逆序

  66.  
  67. // length=string.length();

  68. // 逐个增加string.charAt(length--);

  69. }

  70. return sb.toString();

  71. }

  72.  
  73. public static String reverse6(String string) {

  74. StringBuffer sb = new StringBuffer(string);

  75. for (int i = 0, j = sb.length() - 1; i < sb.length() >>> 1; i++, j--) {

  76. char temp = sb.charAt(i);

  77. sb.setCharAt(i, sb.charAt(j));

  78. sb.setCharAt(j, temp);

  79. }

  80. return sb.toString();

  81. }

  82.  
  83. public static String reverse7(String string) {

  84. StringBuffer sb = new StringBuffer();

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

  86. sb.append(string.charAt(i));

  87. }

  88. return sb.toString();

  89. }

  90. }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值