A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葛晓东 中级黑马   /  2014-6-4 23:54  /  1250 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 葛晓东 于 2014-6-7 22:24 编辑
  1. /**
  2. * 字符串缓冲区自定义翻转
  3. *
  4. */
  5. /*
  6. * 分析:
  7. *         字符串缓冲区底层数据结构是可变数组
  8. * 1,将字符串缓冲区转换为字符串,再将字符串转换为字符数组
  9. * 2,所谓反转就是数组中最远的两个元素互换位置,可以引入第三方变量来实现互换
  10. * 3,得到数组后再转换为字符串缓冲区就可以了
  11. */
  12. public class MyReverseDemo {
  13.         public static void main(String[] args) {
  14.         //定义字符串缓冲区
  15.         StringBuilder builder = new StringBuilder();
  16.         builder.append("123true");
  17.         //调用自定义翻转方法
  18.         myReverse(builder);
  19.         System.out.println(builder);
  20.         }
  21.         //自定义翻转方法
  22.         private static StringBuilder  myReverse(StringBuilder builder){
  23.                 //将字符串缓冲区转换为字符串
  24.                 String str = builder.toString();
  25.                 //将字符串转换为字符数组
  26.                 char[] chs = str.toCharArray();
  27.                 //在字符数组中操作字符互换位置
  28.                 for (int i = 0; i < chs.length/2; i++) {
  29.                         //定义第三方变量,实现互换位置
  30.                         char temp = chs[i];
  31.                         chs[i] = chs[chs.length-1-i];
  32.                         chs[chs.length-1-i] = temp;
  33.                 }
  34.                 //换完之后再将得到的字符数组转换为字符串缓冲区
  35.                 return (builder.delete(0,builder.length())).append(chs);
  36.         }
  37. }
复制代码

能不能不用deleted()方法,new 一个StringBulider()来接收返回的新字符串?
我试着这样操作了一下
StringBuilder builder1 = new StringBuilder();
return builder1.append(chs);  为什么输出的还是原来的字符串缓冲区

2 个回复

倒序浏览
粗略看一下应该是因为你新建的builder1是在 myReverse方法内部的,你可以在方法内打印builder1
System.out.println(builder1.append(chs));   值是所需要的。
而主函数中传递的是builder,打印的还是builder。
所以myReverse方法中实现的功能应该是对builder进行操作,并返回。

回复 使用道具 举报
  1. /**
  2. * 字符串缓冲区自定义翻转
  3. *
  4. */
  5. /*
  6. * 分析:
  7. *         字符串缓冲区底层数据结构是可变数组
  8. * 1,将字符串缓冲区转换为字符串,再将字符串转换为字符数组
  9. * 2,所谓反转就是数组中最远的两个元素互换位置,可以引入第三方变量来实现互换
  10. * 3,得到数组后再转换为字符串缓冲区就可以了
  11. */
  12. public class A {
  13.         public static void main(String[] args) {
  14.         //定义字符串缓冲区
  15.        // StringBuilder builder = new StringBuilder();
  16.        // builder.append("123true");
  17.                  StringBuilder builder = new StringBuilder();
  18.                   builder.append("123true");
  19.         //调用自定义翻转方法
  20.         myReverse(builder);
  21.        // System.out.println(builder);
  22.         }
  23.         //自定义翻转方法
  24.         private static StringBuilder  myReverse(StringBuilder builder){
  25.                 //将字符串缓冲区转换为字符串
  26.                 String str = builder.toString();
  27.                
  28.               
  29.                 //将字符串转换为字符数组
  30.                 char[] chs = str.toCharArray();
  31.                 //在字符数组中操作字符互换位置
  32.                 for (int i = 0; i < chs.length/2; i++) {
  33.                         //定义第三方变量,实现互换位置
  34.                         char temp = chs[i];
  35.                         chs[i] = chs[chs.length-1-i];
  36.                         chs[chs.length-1-i] = temp;
  37.                 }
  38.                 StringBuilder builder1 = new StringBuilder();
  39.                 //换完之后再将得到的字符数组转换为字符串缓冲区
  40.                 System.out.println(builder1.append(chs));  
  41.                 return  builder1.append(chs);
  42.                  
  43.         }
  44. }
复制代码

你可以将输出语句放在类中试试,在主函数中打印的还是builder的内容,放在类中就是新建的对象的了

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马