Java:找到大写字母时拆分字符串

Gui*_*ido 43 java regex string

我认为这是一个简单的问题,但我无法找到一个简单的解决方案(比如,少于10行代码:)

我有一个String这样的"thisIsMyString",我需要将其转换为String[] {"this", "Is", "My", "String"}.

请注意第一个字母不是大写字母.

axt*_*avt 102

您可以使用零宽度正向前瞻的正则表达式 - 它找到大写字母但不包括它们到分隔符:

String s = "thisIsMyString";
String[] r = s.split("(?=\\p{Upper})");
Run Code Online (Sandbox Code Playgroud)

Y(?=X)匹配Y后跟X,但不包括X匹配.因此(?=\\p{Upper})匹配一个空序列后跟一个大写字母,并将split其用作分隔符.

有关Java regexp语法的更多信息,请参阅javadoc.

编辑:顺便说一下,它也不起作用thisIsMyÜberString.对于非ASCII大写字母,您需要一个Unicode大写字符类而不是POSIX一个:

String[] r = s.split("(?=\\p{Lu})");
Run Code Online (Sandbox Code Playgroud)

  • +1,你是第一个(几秒钟),+解释,+预定义的上层:) (2认同)
  • 对于 **Kotlin** `s.split(Regex("(?=\\p{Upper})"))` (2认同)

Boz*_*zho 17

String[] camelCaseWords = s.split("(?=[A-Z])");
Run Code Online (Sandbox Code Playgroud)

  • axtavt 已经对 Guido 的问题给出了正确答案,那为什么还要回答两次呢?你的答案是错误的,所以我否决了它并指出了原因。 (2认同)

Mul*_*der 11

对于那些想知道如何分割String的字符串可能以大写字符开头的人:

String s = "ThisIsMyString";
String[] r = s.split("(?<=.)(?=\\p{Lu})");
System.out.println(Arrays.toString(r));
Run Code Online (Sandbox Code Playgroud)

给出:[This,Is,My,String]


RoT*_*oRa 5

由于String::split采用正则表达式,您可以使用前瞻:

String[] x = "thisIsMyString".split("(?=[A-Z])");
Run Code Online (Sandbox Code Playgroud)