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

The*_*imp 51 java regex string

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

String a = "123abc345def";
Run Code Online (Sandbox Code Playgroud)

结果如下:

x[0] = "123";
x[1] = "abc";
x[2] = "345";
x[3] = "def";
Run Code Online (Sandbox Code Playgroud)

但是我完全不知道如何才能实现这一目标.请有人帮帮我吗?我尝试在线搜索类似的问题,但是在搜索中正确地表达它是非常困难的.

请注意:字母和数字的数量可能会有所不同(例如,可能会出现像'1234a5bcdef'这样的字符串)

Qta*_*tax 87

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

str.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
Run Code Online (Sandbox Code Playgroud)

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

  • 请记住,此解决方案将威胁字符,既不是数字也不是字母,而是字母,因此您可能需要验证您的部件. (4认同)
  • `\ D`适用于重音字符,`[a-zA-Z]`不适用.如果你想特别匹配unicode"字母",你可以使用`\ p {L}`或`\ p {L}\p {M}*`. (2认同)

nul*_*ent 9

怎么样:

private List<String> Parse(String str) {
    List<String> output = new ArrayList<String>();
    Matcher match = Pattern.compile("[0-9]+|[a-z]+|[A-Z]+").matcher(str);
    while (match.find()) {
        output.add(match.group());
    }
    return output;
}
Run Code Online (Sandbox Code Playgroud)


Thế*_*yễn 7

你可以试试这个:

Pattern p = Pattern.compile("[a-z]+|\\d+");
Matcher m = p.matcher("123abc345def");
ArrayList<String> allMatches = new ArrayList<>();
while (m.find()) {
    allMatches.add(m.group());
}
Run Code Online (Sandbox Code Playgroud)

结果(allMatches)将是:

["123", "abc", "345", "def"]
Run Code Online (Sandbox Code Playgroud)


mis*_*off 5

使用两种不同的模式:[0-9]*[a-zA-Z]*并将它们分别分割两次。