java 如何拆分由字母和数字组成的字符串

x3naxklr  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(109)

我有一个由字母和数字组成的字符串,例如。

String s = "C34M78N8X";

字符串
我想把每个字母和旁边的数字分开,这样就可以:

{"C34" "M78" "N8" "X"} //in that order


有什么关于StringInteger的类方法的想法吗?我是Java的初学者,所以我想学习不同的东西。我到处都查过了,什么都没找到。先谢谢你。

c0vxltue

c0vxltue1#

更新:

多亏了Andreas

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String s = "C34M78N8X";
        String[] arr = s.split("(?=\\p{L})");
        System.out.println(Arrays.toString(arr));
    }
}

字符串

输出:

[C34, M78, N8, X]


\p{L}matches a letter(?=(regex))用于Positive Lookahead
regex101上的正则表达式的更多解释:


的数据

原文答案:

使用正则表达式\w(?:\d+)?,您可以使用Java正则表达式API获得匹配。

import java.util.List;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(getTokens("C34M78N8X"));

    }

    static List<String> getTokens(String textString) {
        return Pattern
                .compile("\\w(?:\\d+)?")
                .matcher(textString)
                .results()
                .map(MatchResult::group)
                .collect(Collectors.toList());
    }
}

输出:

[C34, M78, N8, X]

Stream溶液:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(getTokens("C34M78N8X"));

    }

    static List<String> getTokens(String textString) {
        List<String> matches = new ArrayList<>();
        Matcher matcher = Pattern.compile("\\w(?:\\d+)?").matcher(textString);
        
        while (matcher.find()) {
            matches.add(matcher.group());
        }

        return matches;
    }
}


了解有关Java RegEx API的更多信息,请访问**Lesson: Regular Expressions**

regex101处正则表达式说明:


zazmityj

zazmityj2#

您希望在和两个非数字字符之间拆分。
您可以使用以下任意两项来执行此操作:

  • ?!\\d)数字的零宽度负前瞻
  • (?=\\D)非数字的零宽度正向前看

因此,使用(?!\\d)(?=\\D),正则表达式只是说,“* 匹配您看到非数字后跟非数字的区域。

String[] data = { "ABCDEF","A12345","A1B2C3D4","AX3YM67", "A1233BB1233", "A3D456F6D" };
List<List<String>> lists = new ArrayList<>();
for (String str : data) {
    String[] st = str.split("(?!\\d)(?=\\D)");
    lists.add(Arrays.asList(st));
}

for(int i = 0; i < data.length; i++) {
    System.out.println(data[i] + " --> " +  lists.get(i));
}

字符串
印刷品

ABCDEF --> [A, B, C, D, E, F]
A12345 --> [A12345]
A1B2C3D4 --> [A1, B2, C3, D4]
AX3YM67 --> [A, X3, Y, M67]
A1233BB1233 --> [A1233, B, B1233]
A3D456F6D --> [A3, D456, F6, D]

相关问题