2013-02-26 143 views
2

我有一些字符串,我想逐字拆分它們。他們在不同的格式,如:用大寫字母拆分字符串

THIS-IS-MY-STRING 
ThisIsMyString 
This_Is_My_String 
This is my string 

我用:

String[] x = str1.split("(?=[A-Z])|[_]|[-]|[ ]"); 

但也存在一些問題:

  1. x中的一些元素數組將爲空
  2. 爲先字符串我想要「THIS」,但分割的結果是「T」,「H」,「I」,「S」

我該如何改變分割來達到我的目的?你可以幫我嗎?

+1

'[A-Z]'任何大寫字符匹配。所以'THIS'將在每個字符後分割,因此'T','H','I','S'。 – 2013-02-26 20:41:41

回答

0

Try Regex.Split()。第一個參數是要分割的字符串,第二個字符串是您的正則表達式。希望這可以幫助。

+0

非常感謝您的回答:) – user1832388 2013-02-27 09:43:26

+0

當然,Dukeling真的釘上了它。 – MikeMalter 2013-02-27 18:49:43

4

您需要包括向後看還有,在這裏你去:

String[] x = str1.split("([-_ ]|(?<=[^-_ A-Z])(?=[A-Z]))"); 

[-_ ]意味着-_或空間。

(?<=[^-_ A-Z])表示前一個字符不是-,_,空格或A-Z

(?=[A-Z])表示下一個字符是A-Z

Reference

編輯:

不幸的是沒有辦法(我知道的),您可以使用split分裂_CITY_ABC同時避免_CITY或空字符串。

但是,只能處理第一個和最後一個字符串,如果不是空的,但這並不理想。

爲此,我建議Matcher

String str1 = "_CityCITY_"; 
Pattern p = Pattern.compile("[A-Z][a-z]+(?=[A-Z]|$)|[A-Za-z]+(?=[-_ ]|$)"); 
Matcher m = p.matcher(str1); 
while (m.find()) 
    System.out.println(m.group()); 
+0

真棒使用正則表達式 – 2013-02-26 21:03:35

+0

非常感謝,它的工作原理:) – user1832388 2013-02-27 09:42:21

+0

@ user1832388請記住[upvote或accept](http://meta.stackexchange.com/a/168143/206447)答案,你會發現有幫助。 – Dukeling 2013-02-27 11:31:08