今天的老虎证券第一道编程题,从字符串中抽取数字并判断次数。由于对正则表达式不熟悉卡关了。。。考试完后学习了一下,解决了这个问题。直接进入正题吧。
* 学习笔记:
* 字符表示:
* .表示任意字符
* \d 表示数字
* \D 表示非数字
* \s 表示非空字符
* \S 表示为空字符串
* \w 表示为字母、数字、下划线
* \W 表示不是字母、数字、下划线
* \b 开头或结尾
*
* 数量表示:
* ? 0次或者1次
* + 1次或者是多次
* * 0次或者是1次或者是多次
* {n} 表示n次
* {n,m} 表示n到m次
* {n,} 表示n次或以上
*
*/
public class regex1 {
public static void main(String[] args) {
//思路一 使用Pattern类进行匹配,找到所有的非数字,将其替换掉
String a = "addddd231sdad23321dsad23sad21";
String regex = "[^0-9]+";
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(a);
String s = matcher.replaceAll(" ");
System.out.println(s);
//结果为: 231 23321 23 21
//注意。。这里的数字前面还有个“ ”,很难看,所以想到了第二种思路
//思路二 使用replcaeAll和replaceFirst
String s2 = a.replaceFirst("[^0-9]+", "");
String s3 = s2.replaceAll("[^0-9]+", " ");
System.out.println(s3);
//之后再对数字切割
String[] s1 = s3.split(" ");
//然后将结果数组进行遍历放到map里面,找到最大的那个 key和value相乘获得结果
}
}