java - java中连续大写字母的连字符

标签 java regex string

我想用连续出现的大写字母连接 token 。
例如:

Mr. Harry Potter going to school

那么输出应该是:

Mr. Harry-Potter going to school.

它需要连续地对所有以大写字母开头的标记进行分块。 除了以下正则表达式模式

像其他太阳中央政府的例子一样,它应该是太阳中央政府。

我的代码是:

public class Capitalize {

        static String str="mr. Harry Potter is going to school";
        StringBuffer regex = new StringBuffer("Eco[\\.]|Gr[\\.]|Emp[\\.]|Rs[\\.]|Ms[\\.]|No[\\.]|Nos[\\.]|Dt[\\.]|Sh[\\.]|Mr[\\.]|Mrs[\\.]|Admn[\\.]|Ad[\\.]|Smt[\\.]|GOVT[\\.]|Govt[\\.]|Deptt[\\.]|Tel[\\.]|Secy[\\.]|Estt[\\.]|Asstt[\\.]|Hqrs[\\.]|DY[\\.]|Supdt[\\.]|w[\\.]e[\\.]f[\\.]|&I[\\.]|N[\\.]|[0-9]+[\\.][0-9]+[\\.]");
        StringBuffer sb=new StringBuffer();
        public void show()
        {
        StringTokenizer strtkn=new StringTokenizer(str);
        while (strtkn.hasMoreTokens()) {

            String str1=strtkn.nextToken();

            if(Character.isUpperCase(str1.charAt(0)))
            {
                sb.append(str1+"-");

            }
            sb.append(str1+" ");
            System.out.println(sb.toString());
        }

        System.out.println("Final :" +sb.toString());
        }

它给出了这个输出

Final :mr. Harry-Harry Potter-Potter is going to school 
but i want this output
mr. Harry-Potter is going to school 

而且我想忽略:

 StringBuffer regex = new StringBuffer("Eco[\\.]|Gr[\\.]|Emp[\\.]|Rs[\\.]|Ms[\\.]|No[\\.]|Nos[\\.]|Dt[\\.]|Sh[\\.]|Mr[\\.]|Mrs[\\.]|Admn[\\.]|Ad[\\.]...... values if they come into string.

请为我的问题提出一些解决方案。

最佳答案

这是一个简单的单行解决方案:

str = str.replaceAll("(\\b[A-Z][a-z]+) (?=[A-Z][a-z]+)", "$1-");

关于java - java中连续大写字母的连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869779/

相关文章:

Java - 代码覆盖率

java - 如何在java中进行分栏

java - 使用 StringBuffer 值将列添加到 CSV 文件 (Java)

php - 为什么 PHP 正则表达式中有 {m} 的非贪婪版本?

java 正则表达式 - 必需的字符串验证

regex - 在第一个冒号处分割字符串

python-3.x - 根据另一个数据帧中的位置从主数据帧中提取子序列

java - 异构Java EE集群

regex - 仅具有自定义域的电子邮件的正则表达式

java - 将 Set<String> 的内容放入单个字符串的最快方法,其中单词用空格分隔?