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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangshibai 中级黑马   /  2015-9-6 21:38  /  293 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast.p1.string.demo;

import com.sun.xml.internal.ws.encoding.soap.SOAP12Constants;

/*4.模拟一个trim功能一致的方法,去除字符串两端的空白
* 思路:
*                 1.定义两个变量
*                         一个变量作为从头开始判断字符串空格的角标,不断++
*                         一个变量作为从尾开始判断字符串空格的角标,不断--
*                 2.判断到不是空格为止,取头尾之间的字符即可
* */
       
public class StringTest {

        public static void main(String[] args) {
               
                //StringTest1();
                //StringTest2();
                //StringTest3();
                StringTest4();

        }
       
       
        public static void StringTest4() {
                String s = "     ab  c   de     ";
                s=myTrim(s);
                System.out.println("-"+s+"-");
        }
        public static String myTrim(String s) {
                int start =0,end =s.length()-1;
                while(start<=end && s.charAt(start)== ' '){
                        start++;
                }
                while(start<=end && s.charAt(end)== ' '){
                                end--;
                }
                return s.substring(start,end+1);
        }



        /*
         * --------------------------------------------------------------------------------
         */
        /*3.两个字符串中最大相同的子串.
         * 思路:
         *                 1.既然取的是最大子串,先看短的那个字符串是否在长的那个字符串中,如果存在,短的哪个字符串就是最大子串
         *                 2.如果不是呢,那么就将短的那个子串进行长度递减的方式取子串,去长串中判断是否存在,如果存在就已找到,就不用再找了。               
         */
        public static void StringTest3() {
               
                String s1 = "asssdabcdfisvb";
                String s2 = "hjsnabcdju";
                String s = getMaxSubstring(s1,s2);       
                System.out.println("s="+s);
        }
        /*
         * 获取最大相同子串
         */
        public static String getMaxSubstring(String s1, String s2) {
               
                String max = null,min = null;
                max = (s1.length()>s2.length())?s1:s2;
                min = max.equals(s1)?s2:s1;
                System.out.println("max="+max);
                System.out.println("min="+min);
               
                for (int i = 0; i < min.length(); i++) {
                        for (int a = 0,b=min.length()-i;b!=min.length()+1;a++,b++) {
                                String sub = min.substring(a, b);
                                //System.out.println(sub);
                                if(max.contains(sub))
                                        return sub;
                        }               
                }       
                return null;
        }

       
        /*
         * -----------------------------------------------------------------------
         */
        /*
         *  * 2.一个子串在整串中出现的次数。
*                         "nbashunbasfihinbahihfnbaifuhdnba"
*
*                 思路:
*                 1.要找的子串是否存在,如果存在获取其出现的位置,可使用indexOf完成.
*                 2.如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找此子串,而
*                 剩余字符串的其实位为     出现位置+子串长度.
*                 3.以此类推,通过循环来完成查找,如果找不到就是-1.并对每次找到的子串用计数器记录.
*
         */
       
        public static void StringTest2() {
                String str = "nbashunbasfihinbahihfnbaifuhdnbadaabnba";
                String key = "nba";
                int count = getkeyStringCount_2(str,key);
                System.out.println("count="+count);               
        }
        public static int getkeyStringCount_2(String str, String key) {
               
                int count = 0;
                int index =0;
                while((index = str.indexOf(key,index))!=-1){
                        index = index + key.length();
                        count++;
                }       
                return count;
        }

        /*
         * 获取子串在整串中出现的次数
         */
                public static int getkeyStringCount(String str, String key) {
                //定义计数器.
                        int count = 0;       
                //定义变量记录key出现的位置
                        int index = 0;               
                while((index = str.indexOf(key))!=-1){       
                        str = str.substring(index+key.length());
                        count++;               
                }       
                return count;
        }

        /*
         * -----------------------------------------------------------------------
         */
                /*
                 * 1.给定一个字符串数组,按照字典顺序进行从小到达的排序。
                 * {"nab","abc","cba","zz","qq","haha"}
                 *
                 * 思路:
                 *                 1.对数组排序,可以用选择,冒泡都行。
                 *                 2.for嵌套和比较及换位。
                 *                 3.问题,以前排的是整数,比较用的比较运算符,现在是字符串对象。
                 *                 字符串对象怎么比较呢?对象中提供了用于字符串对象比较的功能。
                 * */
        private static void StringTest1() {
               
                String [] arr = {"nab","abc","cba","zz","qq","haha"};       
                printArray(arr);
                sortString(arr);       
                printArray(arr);
        }
        public static void sortString(String[] arr) {
                for (int i = 0; i < arr.length-1; i++) {
                        for (int j = i+1; j < arr.length; j++) {
                                if(arr[i].compareTo(arr[j])>0)
                                                swap(arr,i,j);                       
                        }               
                }
        }
        private static void swap(String [] arr, int i ,int j) {
                String temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;               
        }
        public static void printArray(String[] arr) {
                System.out.print("[");
                for (int i = 0; i < arr.length; i++) {
                        if (i!=arr.length-1)
                                System.out.print(arr[i]+",");
                        else
                                System.out.print(arr[i]+"]");                                                       
                }       
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马