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

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

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

String str = "abc121313sfsdfk56456ffffdd";

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

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

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

String str = "abc121313sfsdfk56456ffffdd";

List letterList = new ArrayList<>();//存储字母列表

List 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 letterList = new ArrayList<>();//存储字母列表

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值