String类练习

1.模拟一个trim方法,去除字符串两端的空格

2.将一个字符串进行反转。将字符串中指定部分进行反转

3.获取一个字符串在另一个字符串中出现的次数

4.获取两个字符串中最大相同子串

5.对字符串中字符进行自然顺序排序

StringDemo 
package com.ff.string;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class StringDemo {
    public static void main(String[] args) {
        String str = "     abd   de     ";
        String str1 = myTrim(str);
        System.out.println(str1);// abd de

        String str2 = "abcdefg";
        String str3 = myReverseString1(str2, 2, 5);// abfedcg
        String str4 = myReverseString2(str2, 2, 5);// abfedcgs
        System.out.println(str3 + "," + str4);// abfedcg,abfedcg
        System.out.println(str3 + str4);// abfedcgabfedcg

        String str5 = "abkkcadkabkebfkabkskab";
        String str6 = "ab";
        System.out.println(getTime(str5, str6));// 4

        List<String> str7 = getMaxSubString("abcwerthelloyuiomdef", "cvhellobnyuiom");
        System.out.println(str7);// [hello, yuiom]

        String str8 = "adfagdgdada";
        String str9 = sort(str8);
        System.out.println(str9);// aaaaddddfgg
    }

    // 5.对字符串中字符进行自然顺序排序。
    // 提示:1)字符串变成字符数组。
    //      2)对数组排序,选择,冒泡,Arrays.sort();
    //      3)将排序后的数组变成字符串。
    public static String sort(String str) {
        char[] c = str.toCharArray();// 转换为数组
        Arrays.sort(c);
        return new String(c);
    }

    // 4.获取两个字符串中最大相同子串。比如: str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"
    //   提示:将短的那个串进行长度依次递减的子串与较长的串比较。
    public static List<String> getMaxSubString(String str1, String str2) {
        String maxStr = (str1.length() > str2.length()) ? str1 : str2;
        String minStr = (str1.length() < str2.length()) ? str1 : str2;
        int len = minStr.length();
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < len; i++) {
            for (int x = 0, y = len - i; y <= len; x++, y++) {
                String str = minStr.substring(x, y);
                if (maxStr.contains(str)) {
                    list.add(str);
                }
            }
            if (list.size() != 0) {
                return list;
            }
        }
        return null;
    }

    // 3.获取一个字符串在另一个字符串中出现的次数。比如:获取“ ab”在 "abkkcadkabkebfkabkskab"中出现的次数
    //   str2在str1中出现的次数
    public static int getTime(String str1, String str2) {
        int count = 0;
        int len;
        while ((len = str1.indexOf(str2)) != -1) {
            count++;
            str1 = str1.substring(len + str2.length());
        }
        return count;
    }

    // 2.将一个字符串进行反转。将字符串中指定部分进行反转。
    //   比如将"abcdefg"反转为"abfedcg"
    //   方法二: 将abcdefg分为三部分,ab cdef g,前面的不变,中间的从后面一个个加进来,再加上最后一部分
    public static String myReverseString2(String str, int start, int end) {
        String str1 = str.substring(0, start);// 截取的第一部分
        for (int i = end; i >= start; i--) {
            char c = str.charAt(i);
            str1 += c;// 加上一个个从后往前字符
        }
        str1 += str.substring(end + 1);// 加上后一部分
        return str1;
    }

    // 方法一:使用数组的方式转换
    public static String myReverseString1(String str, int start, int end) {
        char[] c = str.toCharArray();// 字符串转为数组
        return reverseArray(c, start, end);
    }

    private static String reverseArray(char[] c, int start, int end) {
        for (int i = start, j = end; i < j; i++, j--) {
            char temp = c[i];
            c[i] = c[j];
            c[j] = temp;
        }
        // 字符数组--->字符串
        return new String(c);
    }

    // 1.模拟一个trim方法,去除字符串两端的空格
    public static String myTrim(String str) {
        int start = 0;
        int end = str.length() - 1;
        while (start < end && str.charAt(start) == ' ') {
            start++;
        }
        while (start < end && str.charAt(end) == ' ') {
            end--;
        }
        return str.substring(start, end + 1);// 左闭右开所以得+1
    }
}

 

posted @ 2020-04-02 11:11  林淼零  阅读(171)  评论(0编辑  收藏  举报