栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java常用类03:String课后练习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java常用类03:String课后练习

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

public class Test {

    public static String newTrim (String str) {
        int c = 0, d = 0;
        String str1 = " ";

        for (int i = 0; i < str.length(); i++) {
            char a = str.charAt(i);
            String b = String.valueOf(a);
            if (!b.equals(str1)) {
                c = i;
                break;
            }
        }
        for (int i = str.length()-1; i > 0; i--) {
            char a = str.charAt(i);
            String b = String.valueOf(a);
            if (!b.equals(str1)) {
                d = i;
                break;
            }
        }
        String result = str.substring(c, d+1);
        return result;
    }

    public static void main(String[] args) {
        String abc = newTrim("       1 2a bc   ");
        System.out.println(abc);
    }
}

2. 将一个字符串进行反转。将字符串中指定部分进行反转,比如"abcdefg"反转为"abfedcg"。 方法一
package com.sggclass.string;

public class Test {

    public static String reverse (String str, int start, int end) {
        String str1 = str.substring(0, start);
        for (int i = end; i >= start; i--) {
            str1 += str.charAt(i);
        }
        str1 += str.substring(end+1);
        return str1;
    }

    public static void main(String[] args) {
        String str2 = reverse("abcdefg", 2, 5);
        System.out.println(str2);
    }
}

方法二
package com.sggclass.string;

public class Test {

    public static String reverse (String str, int startIndex, int endIndex) {
        if (str != null) {
            char[] arr = str.toCharArray();
            for (int x = startIndex, y = endIndex; x < y; x++, y--) {
                char temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
            }
            return new String(arr);
        }
        return null;
    }

    public static void main(String[] args) {
        String str2 = reverse("abcdefg", 2, 5);
        System.out.println(str2);
    }
}

方法三
package com.sggclass.string;

public class Test {

    public static String reverse (String str, int startIndex, int endIndex) {
        StringBuilder str1 = new StringBuilder(str.substring(startIndex, endIndex+1));
        str1.reverse();
        return new String(str.substring(0, startIndex) + str1 + str.substring(endIndex+1));
    }

    public static void main(String[] args) {
        String str2 = reverse("abcdefg", 2, 5);
        System.out.println(str2);
    }
}

3. 获取一个字符串在另一个字符串中出现的次数。比如:获取"ab"在"abkkcadkabkebfkabkskab"中出现的次数。
package com.sggclass.string;

public class Test {

    public static int find(String str1, String str2) {
        int index = 0;
        int count = 0;
        if (str1.contains(str2)) {
            while ((index = str1.indexOf(str2, index)) != -1) {
                count++;
                index++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int i = find("abkkcadkabkebfkabkskab", "ab");
        System.out.println(i);
    }
}

4. 获取两个字符串中的最大相同子串(只有一个最大相同子串)。比如:str1 = “abcwerthelloyuiodef”; str2 = “cvhellobnm”; 提示:将短的字符串中长度依次递减的子串与较长的字符串进行比较 方法一:遍历所有子串,找到长度最长的相同子串。
package com.sggclass.string;

public class Test {

    public static String maxSub(String str1, String str2) {
        String longStr;
        String shortStr;
        String result = "";

        //比较两个字符串哪个更长
        if (str1.length() > str2.length()) {
            longStr = str1;
            shortStr = str2;
        } else {
            longStr = str2;
            shortStr = str1;
        }

        //遍历短字符串的所有子串
        for (int i = 0; i < shortStr.length(); i++) {
            for (int j = i+1; j <= shortStr.length(); j++) {
                String a = shortStr.substring(i, j);

                //如果短字符串的子串也是长字符串的子串,且它的长度大于保存在result中的字符串的长度,就更新result
                if (longStr.contains(a) && a.length() > result.length()) {
                    result = a;
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        String sub = maxSub("abcwerthelloyuiodef", "cvhellobnm");
        System.out.println(sub);
    }
}

方法二:从大到小遍历子串,找到的第一个相同子串即是最大相同子串。
package com.sggclass.string;

public class Test {

    public static String getMaxSameString(String str1, String str2) {
        //比较两个字符串哪个更长
        String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
        String minStr = (str1.length() < str2.length()) ? str1 : str2;
        int length = minStr.length();

        //从大到小遍历短字符串的子串,如果它也是长字符串的子串,那它就是最大相同子串
        for (int i = 0; i < length; i++) {
            for (int x = 0, y = length - i; y <= length; x++, y++) {
                String subStr = minStr.substring(x, y);
                if (maxStr.contains(subStr)) {
                    return subStr;
                }
            }
        }
        return null;
    }

    public static void main(String[] args) {
        String sub = getMaxSameString("abcwerthelloyuiodef", "cvhellobnm");
        System.out.println(sub);
    }
}

如果存在多个长度相同的最大相同子串
package com.sggclass.string;

import java.util.Arrays;

public class Test {

    // 如果存在多个长度相同的最大相同子串
    public static String[] getMaxSameString(String str1, String str2) {
        //比较两个字符串哪个更长
        StringBuffer sBuffer = new StringBuffer();
        String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
        String minStr = (str1.length() < str2.length()) ? str1 : str2;
        int len = minStr.length();

        //从大到小遍历短字符串的子串,如果它也是长字符串的子串,那它就是最大相同子串
        for (int i = 0; i < len; i++) {
            for (int x = 0, y = len - i; y <= len; x++, y++) {
                String subStr = minStr.substring(x, y);
                if (maxStr.contains(subStr)) {
                    sBuffer.append(subStr + ",");
                }
            }
            if (sBuffer.length() != 0) {
                break;
            }
        }
        String[] split = sBuffer.toString().replaceAll(",$","").split("\,");
        return split;
    }

    public static void main(String[] args) {
        String[] sub = getMaxSameString("abcwerthelloyuiodefabcde", "cvhellobnmabcde");
        System.out.println(Arrays.toString(sub));
    }
}

5. 对字符串中字符进行自然顺序排序。提示:①字符串变成字符数组;②对数组排序,选择,冒泡,Array.sort();③将排序后的数组变成字符串。
package com.sggclass.string;

import java.util.Arrays;

public class Test {

    public static String sort(String str) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        String result = new String(chars);
        return result;
    }

    public static void main(String[] args) {
        String sorted = sort("hello123world!abc");
        System.out.println(sorted);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号