@[TOC](有可能我这给的答案算法不是很好,如果有更好的,可以去我博客中互相唠唠!)


# 字符分类器:

将输入的参数分为三类,数字,字母,其他,放入返回值中,key值不限。举例:输入"1a 加2b@3c",返回内容:

 {“”数字:“123”,“字母”:“abc”,"其他":"加@"}




javaimport com.sun.deploy.util.StringUtils;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



public class Main {



    public static void main(String[] args) {

        Map<String, String> stringStringMap = splitTypeStr("1a 加2b@3c");

        System.out.println(stringStringMap);

    }





    /**

     *  将输入的参数分为三类,数字,字母,其他,放入返回值中,key值不限。举例:输入"1a 加2b@3c",返回内容:

     *  {“”数字:“123”,“字母”:“abc”,"其他":"加@"}

     */



    //判断是否为字母

    public static boolean is_alpha(String str) {

        if(str==null) return false;

        return str.matches("[a-zA-Z]+");

    }

    public static Map<String,String> splitTypeStr(String args){

        char[] chars = args.toCharArray();//将输入的值,作为字符数组定义

        List<String> list=new ArrayList<>();//存储的字符内容

        String merry="";//数字

        String abcd="";//字母

        String other="";//其他

        Map<String,String> map=new HashMap<>();//定义返回集合map

        for(int i=0;i<chars.length;i++){//循环字符数组,循环遍历char数组中的值,赋值给字符串

            char aChar = chars[i];

            String ctoS=String.valueOf(aChar);

            list.add(ctoS);//将该字符串,循环放入集合中

        }

        for(int k=0;k<list.size();k++){//循环遍历字符数组中的值

            //判断为数字的时候

            boolean numeric = org.apache.commons.lang3.StringUtils.isNumeric(list.get(k));//加载lang3包,通过判断是否为数字

            if(numeric){//如果是,则赋值到map中

                if(merry==""){//判断如果该变量为空,则将循环获取的值赋给该变量。

                    merry=list.get(k);

                }else{//如果该变量不为空,则将该变量和循环出来的变量进行拼接即可赋值新值

                    merry=merry+","+list.get(k);

                }

                String replace = merry.replace(",", "");//截取,号,组成新值

                map.put("数字",replace);



            }else{//不是则判断是否为字母

                boolean alpha = is_alpha(list.get(k));

                if(alpha){//如果是字母,则赋值给map

                    if(abcd==""){

                        abcd=list.get(k);

                    }else{

                        abcd=abcd+","+list.get(k);

                    }

                    String replace = abcd.replace(",", "");

                    map.put("字母",replace);



                }else{//既不是数字也不是字母,那就是特殊符号,放入该判断中判断

                    if(numeric==false && alpha==false){

                        if(other==""){

                            other=list.get(k);

                        }else{

                            other=other+","+list.get(k);

                        }

                        String replace = other.replace(",", "");

                        map.put("其他",replace);



                    }

                }

            }

        }



       return map;

    }

}




{其他= 加@, 数字=123, 字母=abc}

偶然的一个面试题,当时给的时间没做出来,后面回家后做出来了。