Java字符串的4个例子

直接上代码,所有注释都在解释问题和编程步骤。

StringUtils.java是我封装的工具类。

package com.strings;

public class StringUtils {

    private StringUtils() {

    }

    /**
     * 完成字符数组的翻转
     * 
     * @param cArr
     *            :用来翻转的字符数组
     * @param begin
     *            :翻转的开始位置
     * @param end
     *            :翻转的结束位置
     */
    public static void swap(char[] cArr, int begin, int end) {
        while (begin < end) {
            char tmp = cArr[begin];
            cArr[begin] = cArr[end];
            cArr[end] = tmp;
            begin++;
            end--;
        }
    }

    /**
     * @param str
     *            需要翻转的字符串
     * 
     * @return 返回翻转后的字符串
     */
    public static String swapString(String str) {
        char a[] = str.toCharArray();
        swap(a, 0, a.length - 1);

        int index = 0;// 用来记录每次需要翻转子字符串的开始
        for (int i = 1; i < a.length; i++) {
            if (a[i] == ' ') {// 使用 ' '判断单个字符串的结束
                swap(a, index, i - 1);
                index = i + 1;
            }
        }
        swap(a, index, a.length - 1);// 最后一个子字符串只能单独翻转
        return new String(a);
    }

    /**
     * 判断两个字符串是否由相同的字符组成
     * 
     * @param s1
     * @param s2
     * @return
     */
    public static boolean compare(String s1, String s2) {

        char s1Arr[] = s1.toCharArray();
        char s2Arr[] = s2.toCharArray();

        int[] bCount = new int[256];
        for (int i = 0; i < bCount.length; i++) {
            bCount[i] = 0;
        }

        for (int i = 0; i < s1Arr.length; i++) {
            bCount[s1Arr[i] - '0']++;
        }

        for (int i = 0; i < s2Arr.length; i++) {
            bCount[s2Arr[i] - '0']--;
        }

        for (int i = 0; i < bCount.length; i++) {
            if (bCount[i] != 0) {
                return false;
            }
        }

        return true;
    }

    /**
     * 如何刪除字符串中重复的字符
     * 
     * @param str
     * @return
     */
    public static String deleteRepeatString(String str) {

        char cStr[] = str.toCharArray();

        int bCount[] = new int[256];
        for (int i = 0; i < bCount.length; i++) {
            bCount[i] = 0;
        }

        for (int i = 0; i < cStr.length; i++) {
            if (bCount[cStr[i] - '0'] == 0) {// 如果出现的次数为0,则代表第一次遇到这个字符
                bCount[cStr[i] - '0'] = 1;// 次数加1代表,记录该字符已经出现
            } else {
                cStr[i] = '\0';// 如果该字符已经出现过,则把该字符变成 '\0'
            }
        }

        // 去掉cStr数组中的\0元素
        int index = 0;
        for (int i = 0; i < cStr.length; i++) {
            if (cStr[i] != '\0') {
                cStr[index++] = cStr[i];
            }
        }

        return new String(cStr, 0, index);
    }

    /**
     * 如何统计一行字符串中的单词个数
     * 
     * @param str
     * @return
     */
    public static int getWordCountOfString(String str) {
        String trimStr = str.trim();//去掉字符串前后的空格
        return trimStr.split(" ").length;
    }

}

Main.java是测试代码。

package com.strings;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 把how are you字符串变成you are how
        // 思路:把整体翻转(uoy era woh),然后单个翻转(you are how)
        String reversalStr = "how are you";
        System.out.println("翻转前:" + reversalStr);
        System.out.println("翻转后:" + StringUtils.swapString(reversalStr));

        // 判断两个字符串是否由相同的字符组成
        // 相等的意思:组成字符串的字符以及各字符的个数是一样的
        // 思路:由于ASCII字符只有256个,对应编码0-255,于是可以申请大小为256的字符数组来记录字符出现的个数,并初始化为0.
        // 然后遍历第一个字符串的时候,将ASCII码作为下标,把对应数组值加1,然后遍历第二个字符串把对应元素减1,判断这个数组
        // 最后是否是全0
        String equalStr1 = "aaaabbc";
        String equalStr2 = "abcbaaa";
        System.out.println("\n" + equalStr1 + " 和  " + equalStr2 + " 是否由相同字符組成:"
                + StringUtils.compare(equalStr1, equalStr2));

        // 如何刪除字符串中重复的字符
        // 思路:由于ASCII字符只有256个,对应编码0-255,于是可以申请大小为256的字符数组来记录字符出现的个数,并初始化为0.
        // 把字符的编码作为数组的下标,
        String repeatStr = "abcdabcd";
        System.out.println("\n" + repeatStr + " 去掉重复元素以后:"
                + StringUtils.deleteRepeatString(repeatStr));

        // 如何统计一行字符串中的单词个数
        // 思路:空格出现的次数决定单词的数量
        String wordCountStr = "I am hehao";
        System.out.println("\n" + wordCountStr + " 单词个数为:"
                + StringUtils.getWordCountOfString(wordCountStr));




    }

}

还有两个打印数组的排列情况和字符串的所有组合。还没有想明白。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值