字符串处理:下划线,多空格变单空格,统计单词出现个数

假设用户输入的字符串只有小写字母,空格和数字,请编写程序对用户输入的串进行处理,规则如下:

  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));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值