【问题标题】:Converting java string to uppercase without using toUpperCase method不使用 toUpperCase 方法将java字符串转换为大写
【发布时间】:2016-11-10 09:45:54
【问题描述】:

目前为止我所拥有的

public String toUpperCase(String str)
{
    int strLength = str.length();
    String word = "";
    while (strLength > 0)
    {
        char newStr = str.charAt(strLength);
        Character.toUpperCase(newStr);
        Character.toString(newStr);
        word += newStr;
        strLength--;
    }
    return word;
}

我完全迷失了,我的代码可能不合逻辑。一些帮助将不胜感激

【问题讨论】:

  • 尝试在循环时附加字符,而不是每次都替换 newStr2,因此还要确保在 while 循环之外声明新的 String
  • Character.toUpperCase(newStr1)。像char 这样的原语没有方法。
  • 将所有新字符存储在一个 char 数组中,然后在循环之外将它们全部附加到一个字符串中。
  • 您所做的修改不合逻辑。对您正在使用的函数的返回类型进行一些研究。
  • @progy_rock 为什么不呢?考虑到这里有大量 Java 库,这是一个相当严重的限制。

标签: java string char int


【解决方案1】:

要在不使用 toUpperCase() 的情况下将字符串更改为大写,然后检查下面的代码。

if(ch>96 && ch<123)
{
            ch=ch-32;
            System.out.print( (char) ch);
}

检查char是否小写,如果小则从32中减去

【讨论】:

    【解决方案2】:

    Character.toUpperCase() 函数返回一个字符。您必须将该值保存在 char 文字中。

    另外,您应该从strLength - 1 开始循环,否则会抛出StringIndexOutOfBounds 错误。而且,您应该迭代直到索引0。目前,您从strLength 迭代到1

    最后,由于您是在相反的方向进行迭代,因此您应该注意追加字符的方式。

    public String toUpperCase(String str)
    {
        int strLength = str.length();
        String word = "";
        while (--strLength >= 0)
        {
            char newChar = str.charAt(strLength);
            newChar = Character.toUpperCase(newChar);
    
            word = newChar + word; //appending in reverse order
        }
        return word;
    }
    

    注意

    由于要求您编写函数时考虑到该函数不存在,因此不使用Character.toUpperCase() 方法就不会那么讽刺了。连我都用过。在这种情况下,您可以查看@Sam 的建议。上面的代码会有这样的修改:

    char newChar = str.charAt(strLength);
    if((int)newChar > 96 && (int)newChar < 123)
        newChar = newChar - 32;
    
    //the if statement is the replacement of the Character.toUpperCase()
    //function call
    

    【讨论】:

      【解决方案3】:

      你应该看看 ASCII 表。

      char 是整数,'A' 到 'Z' 是 65 到 90,'a' 到 'z' 是 97 到 122。

      因此,如果您在 'a' 和 'z' 之间有一个字符,则需要将 'A' 和 'a' 之间的差异减去。

      'a' - ('a' - 'A') = 'A'

      'c' - ('a' - 'A') = 'C'

      所以你需要迭代你的字符串并对每个字符进行数学运算。

      public static char myUpper(char c){
          if (c >= 'a' || c <= 'z'){
              c = (char) (c - ('a' - 'A'));
          }
              return c;
      }
      

      【讨论】:

        【解决方案4】:

        我个人会这样做。

        String newsentence =""; String question="HeLlo";
            String caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            String lowerCase = "abcdefghijklmnopqrstuvwxyz";
        
            for(int i=0;i<caps.length();i++) {
               for(int j=0;j<caps.length();j++) {
            if(question.equals(lowerCase.subString(j,j+1)){ newsentence+= (caps.subString(i,i+1); }
        
        }} System.out.print(newsentence);
        

        这就是我会做的。

        【讨论】:

        • 刚刚意识到我应该有另一个 for 循环来通过 question 变量进行子串
        猜你喜欢
        • 2013-04-21
        • 1970-01-01
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 2018-09-16
        • 2019-07-15
        相关资源
        最近更新 更多