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