【问题标题】:char array value not being changed to upper casechar 数组值未更改为大写
【发布时间】:2016-06-13 07:49:44
【问题描述】:

我正在编写一个程序,它接收一个字符串作为输入,如果它包含下划线,它会更改字母的格式。例如,如果我收到字符串“here_wego”,它应该返回“hereWego”,但我只得到“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

【问题讨论】:

  • Character.toUpperCase(c[i+1]); 实际上并没有改变c[i+1]:它只是返回大写的char。此外,更改因调用String.toCharArray() 而产生的char[] 不会更改字符串。你需要return new String(c);
  • char 是一个原语 - 这使它不可变。 Character.toUpperCase(c[i+1]) 返回一个新的 char,它是传入的 char 的大写版本 - 你丢弃它。
  • @AndyTurner 我相信 OP 想将 some_snake_case_string 更改为大写字符串。

标签: java arrays string character uppercase


【解决方案1】:

这应该可以解决问题:

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

【讨论】:

    【解决方案2】:

    试试这个

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

    而不是

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

    【讨论】:

      【解决方案3】:

      您的代码未优化。

      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;
      }
      

      在我计算c[i+1]; 之前,请先计算i++;manip += 也用于添加大写字符!

      如果您不使用 i++; 而是仅使用 c[i+1] 您的输出将是:hereWwego,而不是 hereWego

      【讨论】:

        【解决方案4】:

        @AndyTurner,谢谢,我没有意识到它只是以大写形式返回字符。我相应地更改了我的代码并修复了它:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-19
          • 2016-06-26
          • 2010-09-25
          • 2014-02-20
          • 2012-03-08
          • 1970-01-01
          • 2013-11-23
          • 1970-01-01
          相关资源
          最近更新 更多