我覺得這是一個簡單的問題,但我無法找到一個簡單的解決方案(比如,少於10行代碼:)的Java:拆分字符串時,一個大寫字母被發現
我有一個String
例如"thisIsMyString"
,我需要將它轉換爲String[] {"this", "Is", "My", "String"}
。
請注意第一個字母不是大寫字母。
我覺得這是一個簡單的問題,但我無法找到一個簡單的解決方案(比如,少於10行代碼:)的Java:拆分字符串時,一個大寫字母被發現
我有一個String
例如"thisIsMyString"
,我需要將它轉換爲String[] {"this", "Is", "My", "String"}
。
請注意第一個字母不是大寫字母。
您可以使用正規零寬度正預測先行 - 它發現大寫字母,但不包括他們進入分隔符:
String s = "thisIsMyString";
String[] r = s.split("(?=\\p{Upper})");
Y(?=X)
比賽Y
其次X
,但不包括X
成比賽。所以(?=\\p{Upper})
匹配一個空的序列後跟一個大寫字母,split
使用它作爲分隔符。
有關Java正則表達式語法的更多信息,請參閱javadoc。
編輯:順便說一下,它也不適用於thisIsMyÜberString
。對於非ASCII大寫字母,你需要一個Unicode大寫字符類,而不是POSIX之一:
String[] r = s.split("(?=\\p{Lu})");
由於String::split
需要一個正則表達式,你可以使用一個前瞻:
String[] x = "thisIsMyString".split("(?=[A-Z])");
嘗試這個;
static Pattern p = Pattern.compile("(?=\\p{Lu})");
String[] s1 = p.split("thisIsMyFirstString");
String[] s2 = p.split("thisIsMySecondString");
...
對於任何人想知道的格局是怎麼當分割字符串可能以大寫字母開頭:
String s = "ThisIsMyString";
String[] r = s.split("(?<=.)(?=\\p{Lu})");
System.out.println(Arrays.toString(r));
給出:這是我的,字符串]
這是**不是**原始問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – DavidPostill 2014-12-08 10:07:52
感謝您的補充! – serj 2016-06-02 14:06:54
這個正則表達式將在Caps上分開,省略第一個。所以它應該適用於駱駝案件和適當案件。
(?<=.)(?=(\\p{Upper}))
TestText = Test, Text
thisIsATest = this, Is, A, Test
+1,你是第一個(幾秒),+說明+預定義的上層階級:) – Bozho 2010-09-20 15:03:05
要知道,如果上字符是最後的字符串中您將不會收到一個空洞的超越它的位,例如拆分「H2W」將返回{「」,「2」},其中「」是「H」之前的位,「2」是位於中間的位。通常不是問題,但它可以打破關於返回多少部分的假設。 – locka 2010-09-20 16:25:37
@locka:除了明確檢查外,是否有解決方法? – Jeremy 2011-03-09 17:54:31