java - 如何将字母数字字符串分成数字和字母

标签 java android string textview

例如字符串是 JD85DS8796

有 4 个 TextView ,我想将每个 TextView 设置为:

在第一个 TextView 中 JD ,在第二个 TextView 中 85 ,在第三个 TextView 中 DS ,在第四个 TextView 中 8796 .

最佳答案

首先,是的,您可以为 String.split 提供一个疯狂的正则表达式:

"[^A-Z0-9]+|(?<=[A-Z])(?=[0-9])|(?<=[0-9])(?=[A-Z])"

这意味着分割任何非数字或大写字母的字符序列,以及任何出现的大写字母后跟数字或任何数字后跟大写字母的情况。这里的技巧是匹配大写字母和数字之间的空格(反之亦然),而不消耗字母或数字。为此,我们使用后视来匹配分割之前的部分,并使用前视来匹配分割之后的部分。

但是,您可能已经注意到,上面的正则表达式比您的 VALID_PATTERN 要复杂得多。这是因为您真正要做的是尝试从字符串中提取某些部分,而不是拆分它。

因此,找到字符串中与模式匹配的所有部分并将它们放入列表中是解决该问题的更自然的方法。这就是您的代码的作用,但它以一种不必要的复杂方式实现。您可以通过简单地使用 Pattern.matcher 来大大简化您的代码,如下所示:

private static final Pattern VALID_PATTERN = Pattern.compile("[0-9]+|[A-Z]+");

private List<String> parse(String toParse) {
List<String> chunks = new LinkedList<String>();
Matcher matcher = VALID_PATTERN.matcher(toParse);
while (matcher.find()) {
    chunks.add( matcher.group() );
    }
return chunks;
}

如果您多次执行类似的操作,您可能需要将此方法的主体重构为方法 findAll,该方法将字符串和模式作为参数,然后在 parse 中将其调用为 findAll(toParse, VALID_PATTERN) .

关于java - 如何将字母数字字符串分成数字和字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492788/

相关文章:

java - 如何从服务器验证客户端代码未被修改

android - 如何通过一个方法更新整个 kotlin 类中的 var,然后使用另一个方法调用检索它更新

java - 如何将图像插入到我的 Java 小程序中?

java - 双链表中删除方法内部的未知 for 循环?

java - 在操作栏下方添加选项卡

android - 使用 sqlEscapeString() 后如何取消转义字符串

android - 我是加入、循环查询还是以其他方式从 SQLiteDatabase 检索嵌套表?

python - 一次替换字符串中的所有字符

java - 如果我多次使用它,将 String 声明为 final 是否明智?

c# - 从 RSS 提要创建一个字符串数组