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

Java 如何拆分由字母和整数组成的字符串,java,string,split,Java,String,Split,我有一个由字母和数字组成的字符串,例如 String s = "C34M78N8X"; 我想把每个字母和旁边的数字分开 {"C34" "M78" "N8" "X"} //in that order 你知道我可以从String或Integer中使用什么类方法吗? 我是java的初学者,所以我尝试学习不同的东西。我到处找,什么也找不到。提前感谢更新: 多亏了 输出: \p{L}和?=regex用于

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

String s = "C34M78N8X";
我想把每个字母和旁边的数字分开

{"C34" "M78" "N8" "X"} //in that order
你知道我可以从String或Integer中使用什么类方法吗? 我是java的初学者,所以我尝试学习不同的东西。我到处找,什么也找不到。提前感谢

更新: 多亏了

输出:

\p{L}和?=regex用于

有关正则表达式的更多说明,请访问:

原始答复: 使用正则表达式,\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());
    }
}
非流式解决方案:

了解有关Java正则表达式API的更多信息,请访问

有关正则表达式的解释,请访问:


您希望在和两个非数字字符之间拆分

您可以使用以下任意两种方法执行此操作:

?!\\d数字的零宽度负前瞻 ?=\\D非数字的零宽度正向前瞻 这么说\\d?=\\d正则表达式只是说,匹配看到非数字后跟非数字的区域


如何拆分字符串+关于我可以从字符串中使用的任何类方法的任何想法该方法如何?-坦率地说,我不知道如何研究如何在Java中拆分字符串而不找到该方法。因此我无法指定正则表达式为什么不可以?这正是regex擅长的。或者你的意思是你不能,因为你不太了解正则表达式?如果是这样的话,那么你的措辞就错了。-我到处调查,没有发现任何不正确的地方。你找到了split方法,但是你拒绝了它,这太糟糕了,因为这正是你需要的。我确实说了eg来说明这只是一个例子。我想要一个可以处理我输入的任何字符串的代码,而不是这个。对于String.split,您必须指定一个正则表达式,但是我输入的每个字符串都有不同的字母和数字,我希望每个字母及其后面的数字都被拆分。因此,我无法在String.split方法中指定正则表达式。对不起,我应该说得更清楚。听着,我是个初学者。如果我的研究没有告诉我如何按照你建议的方式使用分割法,我很抱歉。这是一个无辜的问题,其实没什么大问题。无论如何,谢谢你的帮助。我甚至投了反对票,所以现在我不能发帖了,我希望这能给你带来一些平静考虑到示例输入,一个简单的拆分?=\\p{L}在letter之前拆分也可以,不是吗?
[C34, M78, N8, X]
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]
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;
    }
}
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]