黑马程序员技术交流社区

标题: 怎样自定义方法实现字符串逆置???? [打印本页]

作者: y200745    时间: 2014-4-5 22:43
标题: 怎样自定义方法实现字符串逆置????
今天逛csdn论坛,发现一个人问我,怎样实现字符串逆置,就像是ABCD,逆置后为DCBA。我就信誓旦旦的写了一下的代码:
  1. import java.util.Scanner;
  2. public class Reverse
  3. {
  4.         public static void main (String[]args)
  5.         {
  6.                 System.out.println("请输入要逆置的字符串:");
  7.                 Scanner input =new Scanner(System.in);//new 一个Scanner类型的对象
  8.                 String str=input.nextLine();//接受控制台输入的数据
  9.                 StringBuffer s = new StringBuffer();//new 一个StringBuffer对象,目的是使用该对象的方法
  10.         s.append(str);//该方法调用java所提供的方法,意思是将str装入容器中
  11.                 s.reverse();//该函数就是楼主要实现的功能,将str逆置,怎么样,java逆天吧
  12.                 System.out.println("逆置后字符串为:");
  13.                 System.out.println(s.toString());
  14.     }
  15. }
复制代码
但是后来又被追问,我的方法全是java提供的,怎样自定义实现啊?我就用了charAt()方法,可是继续被追问,求大神指教,怎么自定义方法实现啊?????????????


作者: 水蓝    时间: 2014-4-5 22:54
本帖最后由 水蓝 于 2014-4-5 22:55 编辑
  1. public static void main(String[] args) {
  2.                 //源字符串
  3.                 String srcStr = "abcdefg";
  4.                 //转换成数组
  5.                 char[] chars = srcStr.toCharArray();
  6.                
  7.                 //这边用双循环变量,看起来清晰一点
  8.                 for(int i=0,j=chars.length-1;i<j;i++,j--)
  9.                 {
  10.                         //交换
  11.                         char temp = chars[i];
  12.                         chars[i] = chars[j];
  13.                         chars[j] = temp;
  14.                 }
  15.                 //转换后字符串
  16.                 String objStr = new String(chars);
  17.                
  18.                 //验证输出
  19.                 System.out.println(objStr);
  20.         }
复制代码


作者: y200745    时间: 2014-4-5 22:57
水蓝 发表于 2014-4-5 22:54

谢谢你的回答,不过你还是没有明白我的意思?char[] chars = srcStr.toCharArray();不也是调用了java的函数吗,我的意思是不调用java的函数,自己定义。不过还是谢谢哈
作者: 水蓝    时间: 2014-4-5 23:07
y200745 发表于 2014-4-5 22:57
谢谢你的回答,不过你还是没有明白我的意思?char[] chars = srcStr.toCharArray();不也是调用了java的函 ...

稍等,我再写一个
作者: 水蓝    时间: 2014-4-5 23:25
y200745 发表于 2014-4-5 22:57
谢谢你的回答,不过你还是没有明白我的意思?char[] chars = srcStr.toCharArray();不也是调用了java的函 ...

楼主这个要求,太特殊了。按这种要求,代码里面就不能出现String对象。
也就不能用Scanner的nextLine()方法获取数据。
以下代码,你看看是不是符合要求。
  1.         public static void main(String[] args) throws IOException {
  2.                 InputStreamReader isr = new InputStreamReader(System.in);
  3.                 char[] cbuf = new char[1024];
  4.                 int ch;
  5.                 int count=0;
  6.                 //读取数据,缓存到cbuf
  7.                 while((ch = isr.read())!=-1)
  8.                 {
  9.                         //遇到换行符则结束
  10.                         if(ch=='\r' || ch=='\n')
  11.                         {
  12.                                 break;
  13.                         }
  14.                         cbuf[count] = (char) ch;
  15.                         count++;
  16.                 }
  17.                
  18.                 //构建需要的字符数组
  19.                 char[] chars = new char[count];
  20.                 for(int i=0; i<count; i++)
  21.                 {
  22.                         chars[i] = cbuf[count-1-i];
  23.                 }
  24.                
  25.                 //输出验证
  26.                 System.out.println(Arrays.toString(chars));
  27.         }
复制代码

作者: y200745    时间: 2014-4-5 23:40
水蓝 发表于 2014-4-5 23:25
楼主这个要求,太特殊了。按这种要求,代码里面就不能出现String对象。
也就不能用Scanner的nextLine()方 ...

不错,不错,真是太牛,嘿嘿。谢了
作者: 依旧    时间: 2014-4-6 22:16
将字符数组倒着打印不就行了么?
作者: 黄泉    时间: 2014-4-6 23:02
看以下毕向东第一阶段第13天-07-String(字符串练习2),那里面讲的很清楚。
我把我写的代码给你发过来,
  1. //将两边空格去掉的方法
  2.         public static String method_1(String str)
  3.         {
  4.                 //将其转换成字符数组
  5.                         char[] ch = str.toCharArray();

  6.                 int start = 0 , end = str.length()-1;
  7.                 //判断空格,记录不是空格的首尾角标
  8.                 while(start <= end && str.charAt(start) == ' ')
  9.                         start++;

  10.                 while(start <= end && str.charAt(end) == ' ')
  11.                         end--;

  12.                 return str.substring(start , end+1) ;
  13.         }
复制代码

这个链接里还有我写的另外3个关于String的基本功能和一些有趣的代码,有兴趣看以看看
http://bbs.itheima.com/thread-113060-1-1.html
作者: bjfanxc    时间: 2014-4-6 23:25
如何实现,看java源码,看完源码就有点感觉了,然后在写。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2