写一个字符串反转函数,输入 abcdef 转换成 edcba
来源:互联网 发布:mmd undefined动作数据 编辑:程序博客网 时间:2024/06/05 03:03
题目:写一个字符串反转函数,输入 abcdef 转换成 edcba
没写什么特别有意义的东西,就随便做做笔记。
//反转函数 public static String reverse(String str){ char[] c1 = str.toCharArray(); char[] c2 = new char[c1.length]; for(int i=0,j=c1.length-1;i<c1.length;i++,j--){ c2[j]=c1[i]; } return c2.toString(); } //main 函数 public static void main(String args[]){ String str = "abcdedf"; System.out.println(str); str = reverse(str); System.out.println(str); }
运行,发现输出的不对:
abcdedf[C@4517d9a3
查看 c2.toString( )一看,发现调用的是 Object 类的 toString( )方法。
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
修改反转函数:
//反转函数 public static String reverse(String str){ char[] c1 = str.toCharArray(); char[] c2 = new char[c1.length]; for(int i=0,j=c1.length-1;i<c1.length;i++,j--){ c2[j]=c1[i]; } return new String(c2); }
运行,输出:
abcdedffdedcba
然后想去看看自己写的反转函数和 String 自带的反转函数的区别在哪,才发现,原来 String 没有反转函数。
然后发现 StringBuffer 和 StringBuilder 才有 reverse 函数,且该这两个类中的 reverse 函数实际上调用的是父类 AbstractStringBuilder 的 reverse 函数。
题外话:StringBuffer 和 StringBuilder 中的绝大多数方法都是去调用父类的相应方法,而 StringBuffer 较 StringBuilder 而言,区别是 StringBuffer 是线程安全的,因为 StringBuffer 的绝大多数方法都会使用 synchronized 进行修饰,以此保证线程安全。
这是AbstractStringBuilder 的 reverse 函数:
public AbstractStringBuilder reverse() { boolean hasSurrogates = false; int n = count - 1; // 折半交换 for (int j = (n-1) >> 1; j >= 0; j--) { int k = n - j; //k+j=n char cj = value[j]; char ck = value[k]; value[j] = ck; value[k] = cj; if (Character.isSurrogate(cj) || Character.isSurrogate(ck)) { hasSurrogates = true; } } if (hasSurrogates) { reverseAllValidSurrogatePairs(); } return this; }
那两个 if 判断是在干什么,我没看懂。但看懂了它的核心思想是折半交换,算是新的思路吧。其实我感觉把 cj 和 ck 的定义放在 for 外面会更节省空间,不知道说的对不对。
突然好疑惑,上面 c2.toString( ) 方法调用的是 Object 类的 toString( ) 方法。我知道 c2 是字符数组,但是该对象所属的类是哪个类?数组类?
搞懂了再补充上来。
阅读全文
0 0
- 写一个字符串反转函数,输入 abcdef 转换成 edcba
- 字符串反转 abcde-edcba
- 给定一个字符串比如“abcdef”,要求写个函数编程“defabc”,位数是可变的。
- 将字符串进行反转。比如:abcde --> edcba
- 将字符串中进行反转。abcde --> edcba
- 一个字符串反转函数
- 2.字符串的反转,比如abcde,输出edcba
- 反转字符串的一个函数
- DIY一个字符串反转函数
- 写一个方法,实现字符串的反转,如:输入abc,输出cba
- 在网上看到了一个面试题感觉很有意思 写一个函数,实现字符串反转
- C++ 输入一个数字转换成字符串
- 输入一个数字,转换成字符串
- 不考虑溢出,写一个函数把一个字符串转换成整数(atoi)。
- 自写字符串转换成整型函数
- 写一个简单的反转函数,可以判断abc,bvb等字符串是不是对称的
- 【面试经典题之字符串】用C或C++写一个函数,实现反转一个null结尾的字符串
- 8.5 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
- STM32高级定时器(1)
- (C#)Windows Shell 外壳编程系列8
- 数据结构实验之图论六:村村通公路
- 超级素数幂 Python 版
- Android跳转到手机系统各个设置界面的方法及其列表
- 写一个字符串反转函数,输入 abcdef 转换成 edcba
- 删除文件夹、脚本运行cmd命令、解压缩zip
- 面向对象继承关系基本架构
- mysql 取得爬取数据数并插入服务器
- ExecutorService 的理解与使用
- AES 后台加密 CryptoJS 前台解密demo
- mysql--索引功能
- 二叉树操作
- 数据分析(5)-数据处理