2013-12-19 124 views
0

我試圖儘可能地寫一個正則表達式:如何在每個大寫字母之間添加空白處?

  1. 添加每個大寫字母之間的空格。
  2. 刪除所有數字。

我有文本:ClassNameOne839,我想要得到的文本:Class Name One

有一個庫函數做呢?或任何正則表達式?

+0

我懷疑有一個庫。嘗試寫正則表達式,我們可能會幫你 –

+0

可能重複http://stackoverflow.com/q/272633/2006839 – Lakshmi

+0

String s = MyDocumentFileIsHere; String textWithSpace = s.replaceAll(「(。)([A-Z])」,「$ 1 $ 2」); holder.titleTxt.setText(textWithSpace); – Faakhir

回答

4

您可以使用replaceAll()呼叫組合是這樣的:

String text = "ClassNameOne839"; 
String cleanText = text.replaceAll("\\d+", "").replaceAll("(.)([A-Z])", "$1 $2"); 

這首先刪除所有號碼,然後之前的所有大寫字母是不是在String的開頭添加一個空格。 $1$2是對正則表達式的第一個和第二個的引用。

0

以下正則表達式[A-Z][a-z]+(?=[A-Z\s\b0-9])匹配每個單獨的大寫字母后跟另一個大寫字母,空格字符或數字。只需打印每個結果一排與它後面的空間和你設置

編輯:這是ofcourse給你的大寫名稱不包含奇怪的字符,使用將是這樣的:

Matcher matcher = Pattern.compile("[A-Z][a-z]+(?=[A-Z\s\b0-9])").matcher(input); 
while(matcher.find()) { 
    string = string + matcher.group(); 
} 
Sytem.out.println(string); 
0
String result = "ClassName399".replaceAll("\\d", "").replaceAll("([A-Z])", "$1 "); 

第一個表達式將檢測所有整數的字符串(\\d),並刪除它們,第二查找任何大寫字母(使用範圍運算符[]),然後採取什麼你找到$1後添加一個空格它。

有關正則表達式的更多信息,請參見Java Pattern類。

1
org.apache.commons.lang.StringUtils.splitByCharacterTypeCamelCase 

做幾乎你所需要的一切;) 試試這個:

cleanText = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(in.replaceAll("\\d+", "")), " "); 

應該比正則表達式快得多。

相關問題