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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-7-30 22:48 编辑
  1. class Test50
  2. {
  3.         public static void compare(String s1, String s2){
  4.         if(s1.length()<s2.length()){
  5.                 String str=s1;
  6.                 s1 = s2;
  7.                 s2 = str;
  8.         }
  9.         }
  10.         public static void main(String[] args)
  11.         {
  12.                 String s2="abcwerthelloyuiodef";
  13.                 String s1="cvhellobnm";
  14.                
  15.                 compare(s1,s2);
  16.                 System.out.println("较大长度值:"+s1+"    "+"较小长度值:"+s2);
  17.         }
  18. }
复制代码
如果我想用一个方法,获取两个字符串中较长和较短的值,为什么这种交换的方法不管用,是不是String类型的对象在一建立时就不能改变了?所以s1、s2不能交换?那如何用一个方法实现呢?因为我需要调用这个方法,使它的结果可以用到别的方法中。例如下面这段:
  1. /*
  2. 练习四:获取一个字符串在另一个字符串中出现的次数。
  3. */
  4. class StringTest4
  5. {
  6.         public static void compare(String s1, String s2){
  7.         if(s1.length()s2.length()){
  8.                 String str=s1;
  9.                 s1 = s2;
  10.                 s2 = str;
  11.         }
  12. }
  13.         public static String getMaxSubString(String s1,String s2)
  14.         {
  15.                 //String max=getMax(s1,s2);
  16.                 //String min=getMin(s1,s2);
  17.                 //String max="",min="";
  18.                 //max=(s1.length()>s2.length())?s1:s2;
  19.                 //min=(max==s1)?s2:s1;
  20.                 compare(s1,s2);
  21.         String max=s1;
  22.                 String min=s2;
  23.                 for(int x=0;x<min.length();x++)
  24.                 {
  25.                         for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
  26.                         {
  27.                                 String temp=min.substring(y,z);
  28.                                 sop(temp);
  29.                                 if(max.contains(temp))
  30.                                         return temp;
  31.                         }
  32.                 }
  33.                 return "";
  34.         }
  35.         public static void main(String[] args)
  36.         {
  37.                 String s2="abcwerthelloyuiodef";
  38.                 String s1="cvhellobnm";
  39.                 sop(getMaxSubString(s1,s2));
  40.         }
  41.         public static void sop(String str)
  42.         {
  43.                 System.out.println(str);
  44.         }
  45. }
复制代码
那段获取较大和较小长度的方法怎么改?

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

7 个回复

倒序浏览
字符串最大的特点就是 一旦被初始化就不能被改变
楼主参考一下我写的代码 有什么问题再探讨
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(srt());
  6.         }
  7.         public static String srt()
  8.         {
  9.                 String s1 = "abc";
  10.                 String s2 = "ef";

  11.                 if(s1.length()<s2.length())
  12.                         return s2;
  13.                 return s1;
  14.         }
  15. }
复制代码
希望能帮到你  共同学习哈

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
楼主是想把s1和s2进行交换是吧  你的compare方法的类型是void没有返回值
你如果想调用返回后的s1和s2的话得在方法里返回s1和s2这个按我的理解应该是无法实现的
如果你想在主方法中将s1及s2进行调换 可以直接在主方法中执行调换语句
class Test50
{
        public static void main(String[] args)
        {
                String s2="abcwerthelloyuiodef";
                String s1="cvhellobnm";
               
                if(s1.length()<s2.length()){
                String str=s1;
                s1 = s2;
                s2 = str;
        }
                System.out.println("较大长度值:"+s1+"    "+"较小长度值:"+s2);
        }
}


或者可以将其放入数组中进行位置的置换
public class Test2 {
        public static void main(String[] args) {
        String[] strs = {"abcwerthelloyuiodef","cvhellobnm"};        
        compare(strs);              
        System.out.println("较大长度值:"+strs[1]+"    "+"较小长度值:"+strs[0]);
        }
        public static String[] compare(String[] strs)
        {
                if(strs[0].length()<strs[1].length())
                {
                        String temp;
                        temp = strs[0];
                        strs[0] = strs[1];
                        strs[1] = temp;
                }
                return strs;
        }
}

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
应该不可以,字符串被定义后是定型的,即便是添加都是创建新的字符串。
如果实在想交换,我提供一个麻烦点的方法,用数组,交换index。
回复 使用道具 举报
你的那种交换方法是俩个整数int类型的交换方式
if(s1.length()<s2.length()){
               String str=s1;
              s1 = s2;
              s2 = str;
你这是要将字符串进行交换

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
zhouchao 发表于 2013-7-29 23:42
楼主是想把s1和s2进行交换是吧  你的compare方法的类型是void没有返回值
你如果想调用返回后的s1和s2的话得 ...

很给力,多谢了。。。嘿嘿
回复 使用道具 举报
诸隆隆 发表于 2013-7-30 00:40
应该不可以,字符串被定义后是定型的,即便是添加都是创建新的字符串。
如果实在想交换,我提供一个麻烦点 ...

确实不行,多谢了
回复 使用道具 举报
张强1 发表于 2013-7-30 00:42
你的那种交换方法是俩个整数int类型的交换方式
if(s1.length()

确实是这样,多谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马