題目一:給定一個字符串,統計連續字符的個數,輸出一個新的字符串。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();
}
}