拆分CamelCased文本

时间:2017-09-25 11:40:34

标签: java regex split

我需要拆分仅包含 lowerCase UpperCase 字母的 camelCased 文字。如何使用正则表达式?

示例文字: ThisTextIsToBeSplitted

输出:此文本将被拆分

4 个答案:

答案 0 :(得分:3)

我会提供以下解决方案,该解决方案保留首字母缩略词(例如ABC),而其他答案则不会:

String input = "ThisTextWithInitialABCIsToBeSplitted";
String[] parts = input.split("((?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z]))");
for (String part : parts) {
    System.out.println(part);
}

<强>输出:

This
Text
With
Initial
ABC
Is
To
Be
Splitted

拆分的逻辑是使用断言,断言但不消耗。在以下两个条件之一中发生拆分:

(?<=[a-z])(?=[A-Z])
(?<=[A-Z])(?=[A-Z][a-z])

第一个条件是当我们在前面前面的位置用小写字母,并立即以大写字母继续。但仅使用此规则,字符串InitialABCIs将拆分为:

Intitial
ABCI
s

为了解决这个问题,我添加了第二个条件,当前一个字母为大写字母时,它会分开,然后是一个大写字母和一个小写字母。这允许我们将下一个camelcase单词的真正开始分开。

在这里演示:

Rextester

答案 1 :(得分:2)

你可以使用正则表达式

(?=[A-Z])

请参阅regex101 demoonline compiler

答案 2 :(得分:1)

String s = "ThisTextIsToBeSplitted";
System.out.println(Arrays.asList(s.split("(?=[A-Z])")));

工作正常。我的输出是:

[This, Text, Is, To, Be, Splitted]

对于Stephen的例子,输出为[This, T, E, X, T, Is, To, Be, Splitted],因为它会在每个大写字母上吐出

答案 3 :(得分:0)

我已完成表达式:(?=\\p{Upper})