java-如何在字母和数字之间(或数字和字母之间)分割字符串?

我正在尝试找出一种在java中遵循以下模式的字符串拆分方法:

String a = "123abc345def";

结果如下:

x[0] = "123";

x[1] = "abc";

x[2] = "345";

x[3] = "def";

但是我对如何实现这一目标感到完全困惑。 有人可以帮我吗? 我尝试过在线搜索类似的问题,但是很难在搜索中正确地表达它的意思。

请注意:字母和数字的数量可能会有所不同(例如,可能会有类似“ 1234a5bcdef”的字符串)

8个解决方案

86 votes

您可以尝试拆分(?<=\d)(?=\D),例如:

str.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

它匹配数字和非数字之间的位置(以任何顺序)。

(?<=\d)(?=\D)-匹配非数字(\D)和数字(\d)之间的位置

(?<=\d)(?=\D)-匹配数字和非数字之间的位置。

Qtax answered 2020-02-02T22:51:16Z

9 votes

怎么样:

private List Parse(String str) {

List output = new ArrayList();

Matcher match = Pattern.compile("[0-9]+|[a-z]+|[A-Z]+").matcher(str);

while (match.find()) {

output.add(match.group());

}

return output;

}

nullpotent answered 2020-02-02T22:51:36Z

7 votes

您可以尝试以下方法:

Pattern p = Pattern.compile("[a-z]+|\\d+");

Matcher m = p.matcher("123abc345def");

ArrayList allMatches = new ArrayList<>();

while (m.find()) {

allMatches.add(m.group());

}

结果(allMatches)将是:

["123", "abc", "345", "def"]

Thế Anh Nguyễn answered 2020-02-02T22:52:00Z

3 votes

使用两种不同的模式:[0-9]*和[a-zA-Z]*,并分别拆分两次。

mishadoff answered 2020-02-02T22:52:20Z

2 votes

如果您在不使用Java isNumber功能(例如splitString、ArrayList等)的情况下寻找解决方案,则以下内容应会有所帮助:

List splitString(String string) {

List list = new ArrayList();

String token = "";

char curr;

for (int e = 0; e < string.length() + 1; e++) {

if (e == 0)

curr = string.charAt(0);

else {

curr = string.charAt(--e);

}

if (isNumber(curr)) {

while (e < string.length() && isNumber(string.charAt(e))) {

token += string.charAt(e++);

}

list.add(token);

token = "";

} else {

while (e < string.length() && !isNumber(string.charAt(e))) {

token += string.charAt(e++);

}

list.add(token);

token = "";

}

}

return list;

}

boolean isNumber(char c) {

return c >= '0' && c <= '9';

}

此解决方案将数字和“单词”分开,其中“单词”是不包含数字的字符串。 但是,如果您只希望包含英文字母的“单词”,则可以根据自己的要求通过添加更多条件(例如isNumber方法调用)轻松地对其进行修改(例如,您可能希望跳过包含非英文字母的单词)。 另请注意,splitString方法返回ArrayList,以后可以将其转换为String数组。

sergeyan answered 2020-02-02T22:52:46Z

1 votes

很久没有使用Java了,所以只是一些伪代码,应该可以帮助您入门(对我而言,比查找一切都快:))。

string a = "123abc345def";

string[] result;

while(a.Length > 0)

{

string part;

if((part = a.Match(/\d+/)).Length) // match digits

;

else if((part = a.Match(/\a+/)).Length) // match letters

;

else

break; // something invalid - neither digit nor letter

result.append(part);

a = a.SubStr(part.Length - 1); // remove the part we've found

}

Mario answered 2020-02-02T22:53:06Z

1 votes

我正在为关键任务代码执行此类操作。 就像每一秒钟的时间一样重要,因为我需要在不明显的时间内处理180k条目。 因此,我跳过了正则表达式并完全拆分,并允许对每个元素进行内联处理(尽管将它们添加到ArrayList中就可以了)。 如果您想做这件精确的事情,但需要将其速度提高20倍左右...

void parseGroups(String text) {

int last = 0;

int state = 0;

for (int i = 0, s = text.length(); i < s; i++) {

switch (text.charAt(i)) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

if (state == 2) {

processElement(text.substring(last, i));

last = i;

}

state = 1;

break;

default:

if (state == 1) {

processElement(text.substring(last, i));

last = i;

}

state = 2;

break;

}

}

processElement(text.substring(last));

}

Tatarize answered 2020-02-02T22:53:26Z

0 votes

这不是吗"d+|D+"做这项工作,而不是麻烦:"(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"?

Andrew Anderson answered 2020-02-02T22:53:46Z

java 数字和字母_java-如何在字母和数字之间(或数字和字母之间)分割字符串?...相关推荐

  1. java获取汉字拼音_Java获取汉字对应的拼音(全拼或首字母)

    Java 根据汉语字符串获得对应的拼音字符串或者拼音首字母字符串等操作,需要添加jar包: 代码实现: import java.util.regex.Matcher; import java.util ...

  2. java将汉字转成拼音首字母大写字母_java 根据汉字生成拼音全拼或拼音首字母的示例...

    1.情景展示 java 根据中文生成对应的拼音 2.准备工作 所需jar包:pinyin4j-2.5.0.jar 3.解决方案 导包 import net.sourceforge.pinyin4j.P ...

  3. java mb单位转换_Java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)

    程序员都很懒,你懂的! java程序员在实际的开发中会遇到很多的单位换算问题.今天我给大家带来的是关于计算机硬盘大小的换算.多数情况下,一般要求 b,kb,mb,gb,tb,pb之间的大小转换,我们都 ...

  4. java保存base64图片_java保存base64位的图片,并且用时间文件夹分割

    需求:首先获取一个base64格式的图片,然后保存在指定文件夹内,并且新建时间文件夹进行区分,如果时间文件夹存在就直接存储,时间文件夹不存在就新建文件夹./** * 保存图片 * * @param b ...

  5. java秒转换为年月日_java时间转化为年月日以及将秒转化为天小时分秒字符串显示总结...

    注意:php的后台的时间按照秒计算,android按照毫秒计算,所以时间 String getstrtime = Tool.getNormalTime(Long.parseLong(time + &q ...

  6. java 随机字母_Java基础之随机生成数字和字母

    字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information I ...

  7. java验证字符是否为字母_Java程序检查字符是否为字母

    Java程序检查字符是否为字母 在此程序中,您将学习检查给定字符是否为字母.这是使用Java中的if...else语句或三元运算符完成的. 示例1:使用if...else语句检查字母的Java程序 p ...

  8. java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

  9. java 26个英文字母_java 如何判断是否是26个英文字母

    场景 需要判断,首字母是否是英文字母. 有人说,那还不简单么,StringUtils.isAlpha() 就可以搞定. 笔者也是这么想的,结果却不是如此,代码: logger.info("字 ...

最新文章

  1. geohash vs PostGIS
  2. 解读云原生下的可观察性发展方向
  3. 树,森林,二叉树的互相转换
  4. 2018蓝桥杯模拟赛·青出于蓝而胜于蓝 DFS序+树状数组
  5. response.setContentType()的作用及MIME参数详解
  6. 华为开源数据虚拟化引擎HetuEngine;全球超算500强:中国上榜数量增加;谷歌收购云计算公司CouldSimple ……...
  7. java 声明静态类,为什么你不能在Java中将类声明为静态?
  8. apache cxf java_Java-Apache CXF Web服务问题
  9. Mysql学习第一课-mysql的定义及sql语句
  10. bat批处理 变量名写入文本,中文写入文本,延迟写入文本
  11. 语言(文化)代码与国家地区对照表,各国手机号正则
  12. Jensen不等式讲解与证明
  13. java docx4j_docx4j基本操作
  14. linux运维工程师问题,2、Linux运维工程师之解决问题思路
  15. 磁场强度H和磁感应强度B的区别
  16. 瑜伽美体塑形馆小程序课程报名系统开发制作
  17. matlab写wav文件
  18. 读MBA,四大误区要澄清!
  19. popped是什么意思_popped to是什么意思
  20. 包教包会:龙芯3A5000上尝试运行任意Windows软件

热门文章

  1. VBO,VAO,,EBO-penGL进阶(二十) - 绘制一个长方形和一个三角形
  2. 快慢指针判断链表中是否存在环以及查找环的起始位置
  3. 刷题日记 acwing 2058笨拙的手指 位运算的运用,迭代器的使用,秦九稍(别的进制转化为10进制)
  4. 【工业互联网】工业互联网跃升为“中国制造2025”主攻方向,巨头环饲下你以何胜出?
  5. Web前端学习笔记(十五)---四色花瓣
  6. 关于使用Swagger-ui时文档显示实体类中隐藏部分字段的问题
  7. 先传递高八位,后传递低八位_高电子邮件可传递性的7个最佳SMTP服务提供商(2020)
  8. Vue项目实战:接口错误拦截与环境设置
  9. python的excel-python操作Excel的几种方式
  10. Python之路【第十六篇】:Django【基础篇】