2016-06-13 25 views
1

我正在编写一个程序,它接收一个字符串作为输入并更改字母的格式(如果它包含下划线)。例如,如果我收到字符串“here_wego”,它应该返回“thisWego”,但是我只是在“herewego”中获得。我在这里试图做的是将传入的字符串转换为字符数组,然后检查每个字符以检查它是否是下划线。如果它不是下划线,则该字符将被添加到输出字符串中。如果它下划线,则不添加字符,而应将c [i + 1]更改为大写,以便可以在下一个迭代器中添加该字符。字符数组值不会更改为大写

public static String zebulansNightmare(final String functionName) { 

    String manip = ""; 
    char[] c = functionName.toCharArray(); 

    for(int i = 0; i < c.length; i++){ 
     if(c[i]!='_'){ 
      manip += c[i]; 
     } else { 
      Character.toUpperCase(c[i+1]); 
     } 
    } 

    return manip; 
} 

我已经包含了一个调试过程图片的链接。

Going through the program debugging

+1

'Character.toUpperCase(C [1 + 1] );'实际上并没有改变'c [i + 1]':它只是返回大写的'char'。另外,更改由于调用String.toCharArray()而导致的'char []'不会更改该字符串。你需要'返回新的字符串(c);'。 –

+0

'char'是一个原语 - 这使得它不可变。 'Character.toUpperCase(c [i + 1])'返回一个新的'char',它是传入的'char'的大写版本 - 你放弃这个。 –

+0

@AndyTurner我相信OP想要将some_snake_case_string改成一个Upper Upper Cased String。 –

回答

3

这应该做的伎俩:

c[i+1] = Character.toUpperCase(c[i+1]); 
+0

非常感谢! – ThomasJazz

0

尝试这种

} else { 
      manip += Character.toUpperCase(c[i+1]); 
      i++; 
     } 

代替

} else { 
      Character.toUpperCase(c[i+1]); 

     } 
0

你的代码不optimalized。

public static String zebulansNightmare(final String functionName) { 

    String manip = ""; 
    char[] c = functionName.toCharArray(); 

    for(int i = 0; i < c.length; i++){ 
     if (c[i] != '_'){ 
      manip += c[i]; 
     } else { 
      i++; 
      manip += Character.toUpperCase(c[i]); 
     } 
    } 
    return manip; 
} 

看到我算i++;我做c[i+1];之前。此外,manip +=用于添加大写的字符!

如果不使用i++;,而是只使用了c[i+1]你outpur是:hereWwego,而不是hereWego

0

@AndyTurner,谢谢,我不只是意识到它以大写字母返回该字符。因此,我改变了我的代码,并修复它:

if(c[i]!='_'){ 
      manip += c[i]; 
     } else { 
      manip += Character.toUpperCase(c[i+1]); 
      i++; 
     } 

现在,我得到正确的输出,虽然它会抛出一个异常,如果字符串是“here_”

相关问题