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"; } }