Java:在find大写字母时拆分string

我认为这是一个简单的问题,但我无法find一个简单的解决scheme(比如,less于10行的代码:)

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

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

您可以使用正宽度为零的正则expression式 – 它会查找大写字母,但不会将其包含在分隔符中:

 String s = "thisIsMyString"; String[] r = s.split("(?=\\p{Upper})"); 

Y(?=X)匹配Y后跟X ,但不包含X匹配。 所以(?=\\p{Upper})匹配一个空的序列后跟一个大写字母, split将其用作分隔符。

有关Java正则expression式语法的更多信息,请参阅javadoc 。

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

 String[] r = s.split("(?=\\p{Lu})"); 
 String[] camelCaseWords = s.split("(?=[AZ])"); 

对于任何人想知道如何模式是什么时分开的string可能以大写字符开头:

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

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

由于String::split需要一个正则expression式,所以你可以使用一个前瞻:

 String[] x = "thisIsMyString".split("(?=[AZ])"); 

尝试这个;

 static Pattern p = Pattern.compile("(?=\\p{Lu})"); String[] s1 = p.split("thisIsMyFirstString"); String[] s2 = p.split("thisIsMySecondString"); ... 

这个正则expression式将在Caps上分割,省略第一个。 所以它应该适用于骆驼案件和适当的情况。

 (?<=.)(?=(\\p{Upper})) TestText = Test, Text thisIsATest = this, Is, A, Test