Java面试题一:字符串的字符分类器

4 篇文章 0 订阅
3 篇文章 0 订阅
博客分享了一道面试题的解决方案,即编写一个字符分类器,将输入字符串按数字、字母和其他字符分类。代码使用Java实现,通过StringUtils库判断数字,并自定义方法判断字母。最终返回一个Map,包含数字、字母和其他字符的分类结果。博客还展示了运行结果。
摘要由CSDN通过智能技术生成

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

字符分类器:

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

全部代码:

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 :


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}
偶然的一个面试题,当时给的时间没做出来,后面回家后做出来了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程老司机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值