定义一个变量记录当前子串是字母还是数字的状态,再定义一个变量存放当前子串,再定义一个变量存放最长子串.接下来按字符循环字符串,判断当前字符是否符合当前子串状态,符合的话,当前子串拼接这个字符,不符合当前子串状态的话,如果当前子串比最长子串长,就替换最长子串.再把当前子串替换为当前字符转化的字符串. 用JAVA来写就是这样. public static void main(String[] args) { String str = "abc12345sdfsasdfsd"; String subStr = ""; String tmpStr = ""; int numFlg = 0; for (int i=0; i<str.length(); i++) { if (numFlg == 0){ if ((str.charAt(i)-'0')>=0 && ('9'-str.charAt(i))>=0) { numFlg = 1; } else if ((str.charAt(i)-'a')>=0 && ('z'-str.charAt(i))>=0) { numFlg = 2; } else if ((str.charAt(i)-'A')>=0 && ('Z'-str.charAt(i))>=0) { numFlg = 3; } else { numFlg = 0; continue; } } if ((str.charAt(i)-'0')>=0 && ('9'-str.charAt(i))>=0) { if (numFlg == 1) { tmpStr += str.charAt(i); } else { numFlg = 1; if (tmpStr.length() > subStr.length()) { subStr = tmpStr; tmpStr = String.valueOf(str.charAt(i)); } } } else if ((str.charAt(i)-'a')>=0 && ('z'-str.charAt(i))>=0) { if (numFlg == 2) { tmpStr += str.charAt(i); } else { numFlg = 2; if (tmpStr.length() > subStr.length()) { subStr = tmpStr; tmpStr = String.valueOf(str.charAt(i)); } } } else if ((str.charAt(i)-'A')>=0 && ('Z'-str.charAt(i))>=0) { if (numFlg == 3) { tmpStr += str.charAt(i); } else { numFlg = 3; if (tmpStr.length() > subStr.length()) { subStr = tmpStr; tmpStr = String.valueOf(str.charAt(i)); } } } else { if (tmpStr.length() > subStr.length()) { numFlg = 0; subStr = tmpStr; tmpStr = String.valueOf(str.charAt(i)); } } } if (tmpStr.length() > subStr.length()) { subStr = tmpStr; } System.out.print(subStr); }