字串處理:下劃線,多空格變單空格,統計單詞出現個數

shuaishuai3409發表於2016-05-04

假設使用者輸入的字串只有小寫字母,空格和數字,請編寫程式對使用者輸入的串進行處理,規則如下:

  1. 把每個單詞的首字母變為大寫
  2. 把數字與字母之間用下劃線字元”_”分隔開
  3. 把單詞間有多個空格的調整為一個空格
  4. 統計處理後的字串每個單詞出現次數

輸入: we are we 2family2
輸出: We Are We 2_family_2


思路:
1. 難點在於找出單詞首字母: “空格+字母”標記為單詞首字母.
當然得考慮第一個單詞,其屬於邊界情況,要特殊處理
2. 難點在於如何找出數字和字母相連的情況:索引index和index+1對應的字元分別為a-z和0-9;或0-9和a-z
3. 判斷單詞間有多個空格:str[index]==’ ‘&&str[index+1]==’ ‘,找到之後,刪之.
4. 用hashmap:將每個單詞放進hashmap中,統計每個單詞出現的次數.


可執行程式碼:

package bb2;

import java.util.ArrayList;
import java.util.Scanner;

public class subString {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s=(new Scanner(System.in)).nextLine();
        ArrayList <Character>list=new  ArrayList<Character>();
        for(int i=0;i<s.length();i++){
            list.add(s.charAt(i));
        }
        int index=0;
        while(index+1<list.size()){
            if(index==0&&list.get(index)>='a'&&list.get(index)<='z'){
                list.set(index, (char)(list.get(index)-32));
                }
                else if((list.get(index)==' ')&&list.get(index+1)==' '){
                    list.remove(index+1);
                    index--;
                }
                else if(list.get(index)==' '&&list.get(index+1)>='a'&&list.get(index+1)<='z'){
                    list.set(index+1, (char)(list.get(index+1)-32));
                }
                else if(list.get(index)>='0'&&list.get(index)<='9'&&list.get(index+1)>='a'&&list.get(index+1)<='z'){
                    list.add(index+1,'_');
                    index++;
                } 
                else if(list.get(index+1)>='0'&&list.get(index+1)<='9'&&list.get(index)>='a'&&list.get(index)<='z'){
                        list.add(index+1, '_');
                        index++;
                }
            index++;
            }
        for(int i=0;i<list.size();i++){
            System.out.print(list.get(i));
        }
    }
}

相關文章