Java-拆分字母数字字符串

Java-拆分字母数字字符串,java,string,split,Java,String,Split,输入示例: RC23 CC23QQ21HD32 BPOASDf91A5HH123 示例输出: [RC,23] [抄送,23,QQ,21,高清,32] [BPOASDf,91,A,5,HH,123] 字母部分和数字部分的长度不是固定的 我知道如何将split()与regex一起使用,比如/.''''([a-z]),但尽管我检查了split()JavaAPI,但我找不到任何可以帮助我解决此问题的方法 有没有办法使用split()来执行此操作?或者我需要使用另一种方法来拆分这些字符串 任何帮助都将

输入示例:

RC23
CC23QQ21HD32
BPOASDf91A5HH123
示例输出:

[RC,23]
[抄送,23,QQ,21,高清,32]
[BPOASDf,91,A,5,HH,123]
字母部分和数字部分的长度不是固定的

我知道如何将split()与regex一起使用,比如
/.''''([a-z])
,但尽管我检查了
split()
JavaAPI,但我找不到任何可以帮助我解决此问题的方法

有没有办法使用
split()
来执行此操作?或者我需要使用另一种方法来拆分这些字符串


任何帮助都将不胜感激。

您可以使用类似“
”(?您可以匹配1个或多个连续的字母字符或1个或多个连续的数字字符。一旦序列被中断,停止匹配,存储序列,然后重新开始。非单词字符将被完全忽略

编辑:我在下面创建了一个简单的性能测试,以显示使用
String.split()
Pattern.matcher()
之间的速度。split版本比matcher+循环版本快2.5倍

解决方案
尝试此正则表达式:
”((?您尝试过循环吗?请检查:。问题的解决方案是以下正则表达式:
”[^a-Z0-9]+|)(?我尝试过使用循环,但对于我的应用程序,它将在O(n^2)中运行).所以循环对我来说不是一个好选择。我正在考虑将它们分成几个部分并处理字符串数组。这节省了很多时间。回答得好。对我来说很有效。
private static String[] splitAlphaNumeric(String str) {
    return str.split("(?i)((?<=[A-Z])(?=\\d))|((?<=\\d)(?=[A-Z]))");
}
import java.util.*;
import java.util.regex.*;

public class SplitAlphaNumeric {
    private static final Pattern ALPH_NUM_PAT = Pattern.compile("[0-9]+|[A-Z]+");

    private static List<String> input = Arrays.asList(
        "RC23",
        "CC23QQ21HD32",
        "BPOASDf91A5HH123"
    );

    public static void main(String[] args) {
        System.out.printf("Execution time: %dns%n", testMatch());
        System.out.printf("Execution time: %dns%n", testSplit());
    }

    public static long testMatch() {
        System.out.println("Begin Test 1...");
        long start = System.nanoTime();
        for (String str : input) {
            System.out.printf("%-16s -> %s%n", str, parse(str));
        }
        long end = System.nanoTime();
        return end - start;
    }

    public static long testSplit() {
        System.out.println("\nBegin Test 2...");
        long start = System.nanoTime();
        for (String str : input) {
            System.out.printf("%-16s -> %s%n", str, parse2(str));
        }
        long end = System.nanoTime();
        return end - start;
    }

    private static List<String> parse(String str) {
        List<String> parts = new LinkedList<String>();
        Matcher matcher = ALPH_NUM_PAT.matcher(str);
        while (matcher.find()) {
            parts.add(matcher.group());
        }
        return parts;
    }

    private static List<String> parse2(String str) {
        return Arrays.asList(str.split("(?i)((?<=[A-Z])(?=\\d))|((?<=\\d)(?=[A-Z]))"));
    }
}
{
    ...
    String someString = "CC23QQ21HD32";
    String regex = "((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))";
    System.out.println(Arrays.asList(someString.split(regex)));
    //outputs [CC, 23, QQ, 21, HD, 32]
    ...
}