我找到了关于将下划线更改为camelcase的答案但是如何将字母后跟下划线以及数字更改为大写。在其他问题中给出的答案不会将数字后跟数字改为大写。
我想要下划线和数字。
isbarrier1breached => isbarrier1Breached
barrier1_level => barrier1Level
我使用java作为我的编程语言。
答案 0 :(得分:2)
这个要求似乎只有两条规则:
有许多潜在的算法,但一个是保持一个标志,指示我们是否处于上壳模式。
在伪代码中:
doUppercase = false
for each input char 'c' {
# print char the appropriate way:
if(c is not an underscore) {
if(doUppercase) {
append upper cased c to output
} else {
append lower cased c to output
}
}
# set flag for next char
doUppercase = (c is a number or c is an underscore)
}
另一种选择是存储实际的前一个字符,而不是存储下一次迭代的标志。
或者在Java中:
public String camelCase(String s) {
StringBuffer out = new StringBuffer();
boolean doUppercase = false;
for(int i = 0; i<s.length();i++) {
char c = s.charAt(i);
// append if appropriate
if(c != '_') {
out.append(doUppercase ? Character.toUpperCase(c) : c);
}
// set capitalisation for next iteration
doUppercase = ( c == '_' || Character.isDigit(c));
}
return out.toString();
}
答案 1 :(得分:0)
这不太好,但它有效.. :)。效率O(n)
public static void main(String[] args) {
String s1 = "abc2asda12asa";
String s2 = "another_var_so_";
if (s2.endsWith("_")) {
s2 = s2.replaceAll("_$", "");
}
System.out.println(s2);
while (s2.contains("_")) {
int index = s2.indexOf("_");
String s = s2.substring(index, index + 2);
s2 = s2.replace(s, s.substring(1, s.length()).toUpperCase());
}
System.out.println(s2);
if(!s1.substring(s1.length()-1, s1.length()).matches("\\d+$"))
{
int j = 0;
for (int i = 0; i < s1.length() - j; i++) {
if (s1.substring(i, i + 1).matches("\\d+")) {
String s = s1.substring(i + 1, i + 2).toUpperCase();
s1 = s1.replace(s1.substring(i, i + 2), s);
j++;
}
}
System.out.println(s1);
}
}