除了字符串的第一个大写字母外,如何在字符串的每个大写字母前添加“ - ”。
我有一个像这样的字符串“HelloWorldMyNameIsCarl”,我正在使用这个
"HelloWorldMyNameIsCarl".replaceAll("(.)(\\p{Lu})", "$1-$2")
它工作正常。
解决方案
"Hello_World_My_Name_Is_Carl"
但对于“THISForNEWTest”,它不起作用,解决方案是
"T-His-For-NEw-Test"
但我想要
"T-His-For-N-Ew-Test"
请建议我为这个问题做些什么。
感谢。
答案 0 :(得分:3)
如果正则表达式存在太复杂的问题,您可以始终使用普通编程。它甚至可能更有效率:
public static String doIt(String input)
{
int size=input.length();
if(size==0)
return "";
StringBuilder sb=new StringBuilder(size);
sb.append(input.charAt(0));
for(int i=1;i<size;++i)
{
char c=input.charAt(i);
if(Character.isUpperCase(c))
sb.append('-');
sb.append(c);
}
return sb.toString();
}
在任何情况下,对于正则表达式测试,您可以查看this website。
因此,对于正则表达式,解决方案可以是:
return input.charAt(0)+input.substring(1).replaceAll("(\\p{Lu})","-$1");
答案 1 :(得分:1)
你为什么不这样做:
replaceAll("(\\p{Lu})", "-$1").replaceAll("^-", "")
答案 2 :(得分:0)
尝试以下代码:
String test = "THisForNEwTest";
int size = test.length();
StringBuffer sb = new StringBuffer();
if(size!=0)
sb.append(test.charAt(0));
for (int i = 1; i < size; i++) {
if(Character.isUpperCase(test.charAt(i))){
sb.append("-"+test.charAt(i));
}else{
sb.append(test.charAt(i));
}
}
System.out.println("result is::::"+sb.toString());
答案 3 :(得分:0)
试试这个:
public static String function(String str) {
StringBuilder result = new StringBuilder();
List<Integer> capital = new ArrayList<Integer>();
for (int i = 0; i < str.length(); i++)
if (Character.isUpperCase(str.charAt(i)))
capital.add(i);
int capIndex = 0;
int x = 0;
for (int y = 0; y < str.length(); y++) {
if(x < capital.size())
capIndex = capital.get(x);
if (y == 0) {
result.append(str.charAt(y));
x++;
} else if(y == capIndex){
result.append("-" + str.charAt(y));
x++;
} else {
if(str.charAt(y) != ' ')
result.append(str.charAt(y));
}
}
return result.toString();
}