输入字符串split之后,处理前面的字符, 最后一段字段用正则按数字切。

解决方案 »

  1.   

    我感觉应该使用charAt对字符进行分析
      

  2.   


    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
      

  3.   

    你写的这个我还没学到!我是java初学者来的刚学到常用类String类,以及String类常用的方法,能否只用String类常用的方法来写呢?比方说:indexOf(),和charAt()..............
      

  4.   

    我只是把字符转换成字符串在用正则,方便一点。
    你只要把.toString().matches("[a-zA-Z]")这些换成字符比较就ok了
      

  5.   

    先split(" ") 
    之后先把第一个字母变大写  再用正则表达式匹配
      

  6.   


    public class Main { public static void main(String[] args){
    String s="you and   me what java2005program";
    //s="this is   a   99devil";
    s=s.trim();
    s=(char)(s.charAt(0)-32)+s.substring(1);//直接把字符串首字母变大写
    s=s.replaceAll("\\s+", " ");//\\s表示   空格,回车,换行等空白符,+号表示一个或多个的意思,所以...
    for(int i=0;i<s.length()-1;i++){
    if(s.charAt(i)==' '&&(s.charAt(i+1)>='a'&&s.charAt(i+1)<='z')){//前面为空白符后面是小写字母
    s=s.substring(0,i+1)+(char)(s.charAt(i+1)-32)+s.substring(i+2);
    }else if(
    //前面为字母后面为数字
    ((s.charAt(i) >= 'a' && s.charAt(i) <= 'z') || (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'))&& ((s.charAt(i + 1) >= '0' && s.charAt(i + 1) <= '9'))
    //前面为数字后面为字母
    || ((s.charAt(i + 1) >= 'a' && s.charAt(i + 1) <= 'z') || (s.charAt(i + 1) >= 'A' && s.charAt(i + 1) <= 'Z'))&& ((s.charAt(i) >= '0' && s.charAt(i) <= '9'))
    ){
    s=s.substring(0,i+1)+"_"+s.substring(i+1);

    }
    System.out.println(s);
    }
    }