字符串反转

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

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();

      }

  }

 

 

posted @ 2014-02-09 11:23  孤独青鸟  阅读(223)  评论(0编辑  收藏  举报