• 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
        }
    }
    All that work will definitely pay off
  • 相关阅读:
    hdu_5855_Less Time, More profit(二分+最大权闭合图)
    hdu_5832_A water problem(模拟)
    poj_3261_Milk Patterns(后缀数组)
    [bzoj1072][SCOI2007]排列(状态压缩DP)
    [bzoj1597][USACO2008]土地购买(DP斜率优化/四边形优化)
    [bzoj1293][SCOI2009]生日礼物(单调队列)
    [bzoj 2463]谁能赢呢?(博弈论)
    矩阵快速幂优化递推总结
    [bzoj1563][NOI2009]诗人小G(决策单调性优化)
    [bzoj1821][JSOI2010]部落划分(贪心)
  • 原文地址:https://www.cnblogs.com/afangfang/p/12618332.html
Copyright © 2020-2023  润新知