如何在每个大写字母之间添加空格?

时间:2013-12-19 09:05:22

标签: java regex

我尝试编写正则表达式以便:

  1. 在每个大写字母之间添加空格。
  2. 删除所有号码。
  3. 我有文字:ClassNameOne839,我希望得到文字:Class Name One

    有一个库函数可以做到吗?或任何正则表达式?

4 个答案:

答案 0 :(得分:9)

您可以像这样使用replaceAll()次调用的组合:

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

首先删除所有数字,然后在不在String开头的所有大写字母之前添加一个空格。 $1$2是对正则表达式的第一个和第二个的引用。

答案 1 :(得分:1)

org.apache.commons.lang.StringUtils.splitByCharacterTypeCamelCase

几乎所有你需要的东西;) 试试这个:

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

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

答案 2 :(得分:0)

以下正则表达式[A-Z][a-z]+(?=[A-Z\s\b0-9])将匹配每个单独的大写单词,后跟另一个大写字母,空格字符或数字。只需将每个结果打印成一行,后面有一个空格,然后设置

编辑:这是因为您的大写名称不包含奇怪的字符,使用将是这样的:

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);

答案 3 :(得分:0)

String result = "ClassName399".replaceAll("\\d", "").replaceAll("([A-Z])", "$1 ");

第一个表达式将检测字符串中的所有整数(\\d)并删除它们,第二个表达式查找任何大写字母(使用范围运算符[])然后获取您找到的{{{ 1}}并在其后面添加一个空格。

有关正则表达式的更多信息,请参阅Java Pattern类。