2024美团秋招第一场笔试
解题思路:
首先,根据题目可以,要输入n,n表示一共要输入的字符串个数,我们将所有的字符串用字符串数组来存储,然后遍历每一个字符串集合。
接着:在遍第几个字符串时判断该字符串具体属于哪一种分类。因此,我们需要定义一个方法,传递给它字符串参数,判断它是属于那一分类的。
在这个方法中,我们要取出字符串的第一个字符,判断它是字母还是数字,这里就会用到java中的类Character中的函数:substring()切割字符串、matches(str)字符串匹配函数、isDigit(str)判断数字函数以及isLetter(str)判断字母函数。
下面看具体的Java代码:
package jxkjsfdx.lgq;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 输入字符串个数n
int n = sc.nextInt();
String[] strings = new String[n];
// 录入字符串
for (int i = 0; i < n; i++) {
strings[i] = sc.next();
}
// 判断字符串属于哪一种分类
for (int i = 0; i < strings.length; i++) {
String strClassify = strClassify(strings[i]);
System.out.println(strClassify);
}
}
private static String strClassify(String strings) {
// 首先获取字符串的首个字符
char firstChar = strings.charAt(0);
String rest_strings = strings.substring(1, strings.length());
if (Character.isLetter(firstChar)){
// 首字符是字母
if (rest_strings.matches("\\d*")){
// 此时属于第一种分类情况:如果ID以字母开头,并且字母后面的字符全是数字,则属于“standard”。
return "standard";
}else if (rest_strings.matches(".*\\d.*") & rest_strings.matches(".*[a-zA-Z].*")){
// 此时属于第三种情况:如果ID以字母开头,并且字母后面的字符同时包含字母和数字,则属于“mix”。
return "mix";
}
}else if (Character.isDigit(firstChar)){
// 首字符是数字
if (rest_strings.matches("[a-zA-Z]*")){
return "special";
}
}else {
// 首字符既不是字母也不是数字
return "invalid";
}
// 其他情况均返回invalid
return "invalid";
}
}
