夕辞

JAVA对字符串中的字母和数字分组 | 夕辞夕辞

JAVA对字符串中的字母和数字分组

今天在逛百度知道时,遇到一位应该也是开发的提了一个问题,我也就想了一下,记录下来自己的方法。

题目是这样的,定义一个字符串:

String str = "abc121313sfsdfk56456ffffdd";

想实现的效果就是提取出字符串和数字的分组,分组结果就是:abc、121313、sfsdfk、56456、ffffdd。

遍历肯定是必须的,之前想的是遍历每个字符,设置一个临时标志位,和一个临时字符串,用于表示下面的字符是数字或者是字母的时候需要拼接一起,这当然是比较基础的,还有一种方法是利用正则表达式分别匹配出来,接下来就这两种方式,也都写一下。

 

第一种方法:遍历字符串,临时变量方法,代码如下:

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);

 

第二种方法:正则表达式,代码如下:

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);

当然,其他方法肯定也是有的,在这里就展现这两种在脑海中首先想到的,也是比较常见的方法。

2017年3月9日 / /
标签:  暂无标签
回到顶部