今天在逛百度知道时,遇到一位应该也是开发的提了一个问题,我也就想了一下,记录下来自己的方法。
题目是这样的,定义一个字符串:
1 | String str = "abc121313sfsdfk56456ffffdd" ; |
想实现的效果就是提取出字符串和数字的分组,分组结果就是:abc、121313、sfsdfk、56456、ffffdd。
遍历肯定是必须的,之前想的是遍历每个字符,设置一个临时标志位,和一个临时字符串,用于表示下面的字符是数字或者是字母的时候需要拼接一起,这当然是比较基础的,还有一种方法是利用正则表达式分别匹配出来,接下来就这两种方式,也都写一下。
第一种方法:遍历字符串,临时变量方法,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | String str = "abc121313sfsdfk56456ffffdd" ; List<String> letterList = new ArrayList<>(); //存储字母列表 List<String> numberList = new ArrayList<>(); //存储数字列表 char [] charArray = str.toCharArray(); StringBuilder strTemp = new StringBuilder(); boolean lastCharNumber = true ; //true:数字;false:字母 //主要为了防止没有初始化就开始判断,如果去掉,会导致第一个字母a被忽略 boolean inited = false ; for ( int i = 0 ; i < charArray.length; i++) { char charTemp = charArray[i]; boolean tempCharIsNumer = Character.isDigit(charTemp); if (!inited) { inited = true ; lastCharNumber = tempCharIsNumer; } if (lastCharNumber == tempCharIsNumer) { strTemp.append(charTemp); } else { if (lastCharNumber) { numberList.add(strTemp.toString()); } else { letterList.add(strTemp.toString()); } strTemp = new StringBuilder(); strTemp.append(charTemp); lastCharNumber = tempCharIsNumer; } //最后一次 if (i == charArray.length - 1 ) { if (lastCharNumber) { numberList.add(strTemp.toString()); } else { letterList.add(strTemp.toString()); } } } System.out.println(letterList); System.out.println(numberList); |
第二种方法:正则表达式,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | String str = "abc121313sfsdfk56456ffffdd" ; List<String> letterList = new ArrayList<>(); //存储字母列表 List<String> numberList = new ArrayList<>(); //存储数字列表 //数字提取 Pattern numberPattern = Pattern.compile( "[0-9]{1,}" ); Matcher numberMatcher = numberPattern.matcher(str); while (numberMatcher.find()) { numberList.add(numberMatcher.group()); } //字母提取 Pattern stringPattern = Pattern.compile( "[a-zA-Z]{1,}" ); Matcher stringMatcher = stringPattern.matcher(str); while (stringMatcher.find()) { letterList.add(stringMatcher.group()); } System.out.println(letterList); System.out.println(numberList); |
当然,其他方法肯定也是有的,在这里就展现这两种在脑海中首先想到的,也是比较常见的方法。