在java中连续出现大写字母

时间:2014-01-01 14:44:39

标签: java regex string

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

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.

请建议解决我的问题。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

使用此模式(?!Sir|Miss)([A-Z][a-z]+) (?!(?:Mrs|Mr|No)\.)([A-Z][a-z]+)
并替换w $1-$2
Demo

  • (?!Sir|Miss)要忽略的特殊字词列表
  • ([A-Z][a-z]+)单词以大写字母开头
  • ' '后跟空格
  • (?!(?:Mrs|Mr|No)\.)特殊点结尾字列表
  • ([A-Z][a-z]+)后跟一个以大写字母开头的单词

根据以下评论中的修改后的请求 (?!Sir|Miss)([A-Z][a-z]+) (?!(?:Mrs|Mr|No)\.)(?=[A-Z][a-z]+)
并替换w $1- Demo