日期:2014-05-20  浏览次数:20709 次

java中常用类String类问题
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
1. 把每个单词的首字母变为大写。
2. 把数字与字母之间用下划线字符(_)分开,使得更清晰
3. 把单词中间有多个空格的调整为1个空格。

例如:
用户输入:
  you and me what cpp2005program

则程序输出:

  You And Me What Cpp_2005_program

用户输入:
  this is a 99cat
则程序输出:
  This Is A 99_cat
这程序该怎样编写程序啊!

------解决方案--------------------
输入字符串split之后,处理前面的字符, 最后一段字段用正则按数字切。
------解决方案--------------------
我感觉应该使用charAt对字符进行分析
------解决方案--------------------
探讨
我感觉应该使用charAt对字符进行分析

------解决方案--------------------
Java code

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class test {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char[] chars =str.toCharArray();
        List<Character> clist = new ArrayList<Character>();
        
        String flagStr ="space";//space,字母litter,数字number
        for (Character c : chars){
            if (c==' ') {
                if(!flagStr.equals("space")){
                    clist.add(c);
                }
                flagStr="space";
            }
            else if (c.toString().matches("[0-9]")){
                
                if(flagStr.equals("litter")){
                    clist.add('_');
                    
                }
                else if(flagStr.equals("space")){
                    //判断空格前面是不是字母,如果是把空格换成下划线
                    if(clist.size()>=2&&clist.get(clist.size()-2).toString().matches("[a-zA-Z]")){
                        clist.remove(clist.size()-1);
                        clist.add('_');
                    }
                }
                clist.add(c);
                flagStr="number";
            } else if(c.toString().matches("[a-zA-Z]")){
                if(flagStr.equals("space")){
                    c = Character.toUpperCase(c);
                }
                else if(flagStr.equals("number")){
                    clist.add('_');
                }
                clist.add(c);
                flagStr="litter";
            }
        }
    for(Iterator<Character> it=clist.iterator();it.hasNext();){
        System.out.print(it.next().toString());
    }
    }

}
dasfwe   waeopirwe 7a6ef87ae8 sad56f4we we5sa4fsa
Dasfwe Waeopirwe_7_a_6_ef_87_ae_8 Sad_56_f_4_we We_5_sa_4_fsa

------解决方案--------------------
传说中的正则表达式
------解决方案--------------------
没事啊,你把正则表达式换成字符比较就可以的。。。楼主我相信你有这个能力修改好。。。
------解决方案--------------------
我只是把字符转换成字符串在用正则,方便一点。
你只要把.toString().matches("[a-zA-Z]")这些换成字符比较就ok了
------解决方案--------------------
先split(" ") 
之后先把第一个字母变大写 再用正则表达式匹配