zoukankan      html  css  js  c++  java
  • 字符串反转

    你可以用相关的接口来定义这道题,里面有一个未实现的方法。

    public interface Reverser {

      public String reverse(String str);

    }

    在Java中,最好的实现就是用JDK中StringBuffer的反转方法,它不仅速度快,效率高,而且还知道如何处理unicode代理对(surrogate pairs)。其它方案基本上都可以忽略掉。

    public class JdkReverser implements Reverser {

           public String reverse(String str) {

                if ((null == str) || (str.length() <= 1)) {

                    return str;

                }

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

            }

    }

    处理问题:

    问他代码中什么地方有bug,即使没有。或者代码怎么会报错,他的答案至少可以引出一个讨论关于如何处理空值的话题来。

    返回null

    返回“”

    抛出NullPointerException

    抛出IllegalArgumentException

     第二个讨论的焦点是是如何去优化解决方法,像返回字符串本省“”,长度为1的字符串(本省就是反转)

     更多的方案:

    在适当的位置调动StringBuffer:

    public String reverse(String str) {

                if ((null == str) || (str.length()  <= 1 )) {

                    return str;

                }

                StringBuffer result = new StringBuffer(str);

                for (int i = 0; i < (str.length() / 2); i++) {

                    int swapIndex = str.length() – 1 – i;

                    char swap = result.charAt(swapIndex);

                    result.setCharAt(swapIndex, result.charAt(i));

                    result.setCharAt(i, swap);

                }

                return result.toString();

            }

    采用调用数组的方法:

    public String reverse(String str) {

              if ((null == str) || (str.length() <= 1)) {

                  return str;

              }

              char[] chars = str.toCharArray();

              int right = chars.length – 1;

              for (int left = 0; left < right; left++) {

                  char swap = chars[left];

                  chars[left] = chars[right];

                  chars[right--] = swap;

              }

              return new String(chars);

          }

    SringBuffer追加的方法:

    public String reverse(String str) {

              if ((null == str) || (str.length() <= 1)) {

                  return str;

              }

              StringBuffer reverse = new StringBuffer(str.length());

              for (int i = str.length() – 1; i >= 0; i–) {

                reverse.append(str.charAt(i));

              }

              return reverse.toString();

          }

      }

  • 相关阅读:
    jvm系列(八):jvm知识点总览-高级Java工程师面试必备
    jvm系列(七):jvm调优-工具篇
    JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结
    Java ClassLoader详解
    语言堆栈入门——堆和栈的区别
    kubernetes基本了解
    软编码和硬编码的理解
    前台页面传日期类型后台接收问题
    mybatis-plus简单了解
    二叉树基础知识
  • 原文地址:https://www.cnblogs.com/wuxiang/p/3541306.html
Copyright © 2011-2022 走看看