2013-12-19 56 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+", "")), " "); 

应该比正则表达式快得多。

相关问题