描述
输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)
本题含有多组样例输入。
数据范围:字符串长度 1≤n≤200 , 保证每组输入都至少含有一个数字
输入描述:
输入一个字符串。1<=len(字符串)<=200
输出描述:
输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int maxLen = 0;
String s = in.next();
s = s.replaceAll("[^0-9]"," ");
s = s.replaceAll("\\s{1,}"," ");
String[] ss = s.split(" ");
for(int i=0; i<ss.length; i++){
if(ss[i].length() >= maxLen){
maxLen = ss[i].length();
}
}
for(int i=0; i<ss.length; i++){
if(ss[i].length() == maxLen){
System.out.print(ss[i]);
}
}
System.out.println("," + maxLen);
}
}
}
关于正则表达式,给出以下例子,便于理解:
'^[a-zA-Z0-9''-'\s]{1,30}$'
[a-zA-Z] 表示匹配所有大小写字母
0-9 表示数字
"-' 都是表示本义字符,匹配这三个符号.
\s 匹配非换行的所有空白字符
{1,30}代表匹配1次到30次,最少1次. 特别地,{1,}代表至少匹配1次
^ 和 $ 代表匹配一个完整的字符串,如果这个字符串中出现任何一个不是[]中内容的字符这个字符串就无法匹配.