Java實現字符串壓縮即統計連續出現的字符,輸出一個新的字符串

題目一:給定一個字符串,統計連續字符的個數,輸出一個新的字符串。eg:abbbccd,輸出:a1b3c2d1

解題:

public class stringTest {
    public static String func(String str){
        StringBuffer result = new StringBuffer();

        if(str.length()==1){
            result.append(str.charAt(0));
            result.append("1");
        }else{
            result.append(str.charAt(0));
            int c = 1;

            for(int i=0; i<str.length()-1; i++){
                if(str.charAt(i)==str.charAt(i+1)){
                    c++;
                }else{
                    result.append(Integer.toString(c).toCharArray());
                    result.append(str.charAt(i+1));
                    c = 1;
                }
            }
           result.append(Integer.toString(c).toCharArray());

        }
        return result.toString();
    }

    public static void main(String[] args){
        String str = "aabbcdeee";
        System.out.println(stringTest.func(str));
    }
}

note:遍歷指針爲i,由於要用到i+1,考慮到charAt方法潛在越界可能,所以將情況分爲兩種:1、String的長度爲1;2、String的長度大於1.

題目二:與題目一類似進行字符串的壓縮,只是單個字符連續才壓縮,如abcdabcdc無需壓縮;待壓縮字符串中不包含數字和轉義符。

解析:與法一基本類似,只是在處理空指針異常時有些許不同

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String result = fun(s);
        System.out.println(result);
    }

 private static String fun(String s) {
        //爲了防止因爲空指針報錯
        s+="@";
        StringBuilder sb = new StringBuilder("");
        int count = 1;
        if(s.length()==1){
            return null;
        }
        for(int i=1;i<s.length();i++){
            if(s.charAt(i)==s.charAt(i-1)){
                count++;
            }else{
             if(count==1){
                 sb.append(s.charAt(i-1));
                 //count=1;
             }else{
                 sb.append(count+""+s.charAt(i-1));
                 count=1;
             }
            }
        }
        return sb.toString();
 }
    
    
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章