字符分类器:
将输入的参数分为三类,数字,字母,其他,放入返回值中,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}
偶然的一个面试题,当时给的时间没做出来,后面回家后做出来了。