java - 需要在java中将一个字符串分成两部分

标签 java regex string regex-lookarounds lookaround

我有一个字符串,它包含一个连续的数字 block ,然后是一个连续的字符 block 。我需要将它们分成两部分(一个整数部分和一个字符串)。

我尝试使用 String.split("\\D", 1),但它占用了第一个字符。 我检查了所有的 String API 并没有找到合适的方法。

有什么方法可以做到这一点吗?

最佳答案

使用环视:str.split("(?<=\\d)(?=\\D)")

String[] parts = "123XYZ".split("(?<=\\d)(?=\\D)");
System.out.println(parts[0] + "-" + parts[1]);
// prints "123-XYZ"

\d是数字的字符类; \D是它的否定。所以这个零匹配断言匹配前面字符是数字的位置 (?<=\d) , 后面的字符是非数字 (?=\D) .

引用资料

相关问题


使用有限拆分的替代解决方案

以下也有效:

    String[] parts = "123XYZ".split("(?=\\D)", 2);
    System.out.println(parts[0] + "-" + parts[1]);

就在我们看到非数字之前 split 。这更接近您的原始解决方案,除了因为它实际上不匹配非数字字符,所以它不会“吃掉它”。此外,它使用 limit2 ,这正是您想要的。

API 链接

  • String.split(String regex, int limit)
    • 如果极限n大于零,则最多应用该模式 n - 1次,数组的长度将不大于 n , 数组的最后一个条目将包含最后一个匹配的定界符之后的所有输入。

关于java - 需要在java中将一个字符串分成两部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995606/

相关文章:

java - 密码正则表达式不起作用

python - 如何过滤python正则表达式中的模式,直到输入单词

regex - 如何使用正则表达式查找不属于某种模式的东西

php - 从文本框搜索关键字到mysql

javascript - 如何缩短表示字符序列的位数

regex - 从带有附加条件的字符串中提取8位数字

java - RollingEncryptedFileAppender 用于登录?

java - 如何使用 Jgit API 检索指定 github 帐户中的存储库列表?

java - 网球比赛算法

java - 在 dom4j 中指定 XML 路径