我想用连续出现的大写字母连接 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/