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

7

我尝试编写一个正则表达式,以便实现以下目标:

  1. 在每个大写字母之间添加空格。
  2. 删除所有数字。

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

是否有库函数可以做到这一点?或者有任何正则表达式可以使用吗?


我怀疑这方面没有相关的库。你可以尝试编写正则表达式,我们会帮助你。 - Philipp Sander
1
可能是https://dev59.com/enVC5IYBdhLWcg3whBWj的重复问题。 - Lakshmi
String s = MyDocumentFileIsHere; String textWithSpace = s.replaceAll("(.)([A-Z])", "$1 $2"); holder.titleTxt.setText(textWithSpace);字符串 s = MyDocumentFileIsHere; 字符串 textWithSpace = s.replaceAll("(.)([A-Z])", "$1 $2"); holder.titleTxt.setText(textWithSpace); - Fakhar
4个回答

21
你可以像这样使用replaceAll()调用的组合:
String text = "ClassNameOne839";
String cleanText = text.replaceAll("\\d+", "").replaceAll("(.)([A-Z])", "$1 $2");

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

3
如果您想保留数字并且通过谷歌搜索到了这里,请尝试以下操作:String cleanText = text.replaceAll("(.)([A-Z0-9]\\w)", "$1 $2");输出结果将是:"类 名 一 839" - Zeek Aran

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

几乎包含你所需的所有功能;) 试试这个:

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

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


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

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

第一个表达式将检测字符串中的所有整数(\\d)并删除它们,第二个表达式查找任何大写字母(使用范围运算符[]),然后取出你找到的$1并在其后添加一个空格。
有关正则表达式的更多信息,请参阅Java Pattern类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接