【问题标题】:Java - Convert lower to upper case without using toUppercase()Java - 将小写转换为大写而不使用 toUppercase()
【发布时间】:2013-04-21 23:23:03
【问题描述】:

我正在尝试创建一个短程序,它将所有大写字母转换为小写字母(从命令行输入)。

以下编译但没有给我我期望的结果。这会是什么原因??

例如)java toLowerCase BANaNa -> 给出香蕉的输出

 public class toLowerCase{
        public static void main(String[] args){

            toLowerCase(args[0]);
        }

        public static void toLowerCase(String a){

            for (int i = 0; i< a.length(); i++){

                char aChar = a.charAt(i);
                if (65 <= aChar && aChar<=90){
                    aChar = (char)( (aChar + 32) ); 
                }

                System.out.print(a);
            }
         }   
    }

【问题讨论】:

  • 你已经打印了 a 这与你传递的参数更改 System.out.print(a);System.out.print(aChar); 相同

标签: java char ascii uppercase lowercase


【解决方案1】:

对我来说看起来像是家庭作业,只是一个提示。您正在打印字符串a,而您正在修改char 类型aChar,而不是修改原始字符串a。 (记住字符串是不可变的)。

【讨论】:

  • 嗯。那么我应该创建一个新的空字符串来添加新的字符类型吗?
  • @BettyJones,是的,这可能是一种方式,或者您可以打印新创建的字符,因为您没有返回字符串。
【解决方案2】:
public static void toLowerCase(String a){

    String newStr = "";

    for (int i = 0; i< a.length(); i++){

        char aChar = a.charAt(i);
        if (65 <= aChar && aChar<=90){
            aChar = (char)( (aChar + 32) ); 
        }
        newStr = newStr + aChar;    
    }
    System.out.println(newStr);
}

您应该在 for 循环外打印 newStr。您试图在循环内打印它

【讨论】:

    【解决方案3】:

    您正在打印String a,但未对其进行修改。可以直接在循环中打印char,如下:

    public class toLowerCase
    {
        public static void main(String[] args)
        {
            toLowerCase(args[0]);
        }
    
        public static void toLowerCase(String a)
        {
            for (int i = 0; i< a.length(); i++)
            {
                char aChar = a.charAt(i);
                if (65 <= aChar && aChar<=90)
                {
                    aChar = (char)( (aChar + 32) ); 
                }
                System.out.print(aChar);
             }
         }
    }    
    

    【讨论】:

    • 是否有类似 apache/google api 的实用程序可用于此?我想转换 char[] / CharSequence 的大小写而不在两者之间使用 String 。请帮忙。
    【解决方案4】:

    看起来你很接近了。 :)

    对于初学者...

    char aChar = a.charAt(i);
    

    "a" 是一个字符串数组,所以我相信你会想要遍历每个元素

    char aChar = a[i].charAt(0);
    

    而且您似乎还想返回修改后变量的值,而不是最初传入变量的“a”。

    System.out.print(aChar);
    

    不是

    System.out.print(a);
    

    希望对你有所帮助。

    【讨论】:

      【解决方案5】:

      编写此代码的更简洁的方法是

      public static void printLowerCase(String a){
          for(char ch: a.toCharArray()) {
             if(ch >= 'A' && ch <= 'Z')
                ch += 'a' - 'A';
             System.out.print(ch);
          }
      }
      

      注意:这不适用于任何其他范围内的大写字符。 (有1000个)

      【讨论】:

      • 是否有类似 apache/google api 的实用程序可用于此?我想转换 char[] / CharSequence 的大小写而不在两者之间使用 String 。请帮忙。
      【解决方案6】:
      /**
           * Method will convert the Lowercase to uppercase
           * if input is null, null will be returned
           * @param input
           * @return
           */
          public static String toUpperCase(String input){
                  if(input == null){
                      return input;
                  }
                  StringBuilder builder = new StringBuilder();
                  for(int i=0;i<input.length();i++){
                      char stringChar = input.charAt(i);
      
                      if(92 <= stringChar && stringChar <=122){
                          stringChar = (char)( (stringChar - 32) ); 
                          builder.append(stringChar);
                      }
                      else if (65 <= stringChar && stringChar<=90)
                      {
                          builder.append(stringChar);
                      }
                  }
                  if(builder.length() ==0){
                      builder.append(input);
                  }
                  return builder.toString();
              }
      

      【讨论】:

        【解决方案7】:
        import java.util.Scanner;
        public class LowerToUpperC {
        
            public static void main(String[] args) {
        
                 char ch;
                    int temp;
                    Scanner scan = new Scanner(System.in);
        
                    System.out.print("Enter a Character in Lowercase : ");
                    ch = scan.next().charAt(0);
        
                    temp = (int) ch;
                    temp = temp - 32;
                    ch = (char) temp;
        
                    System.out.print("Equivalent Character in Uppercase = " +ch);
        
            }
        
        }
        

        【讨论】:

        • 请检查您的格式并添加一些解释。答案没有提供问题作者要求的功能,因为它只转换单个字符。
        【解决方案8】:
        public class Changecase
        {
            static int i;
        
            static void changecase(String s)
            {
                for(i=0;i<s.length();i++)
                {
                    int ch=s.charAt(i);
                    if(ch>64&&ch<91)
                    {
                        ch=ch+32;
                        System.out.print( (char) ch);
                    }
                    else if(ch>96&&ch<123)
                    {
                        ch=ch-32;
                        System.out.print( (char) ch);
                    }
                    if(ch==32)
                    System.out.print(" ");
                }
            }
        
            public static void main (String args[])
            {
        
                System.out.println("Original String is : ");
                System.out.println("Alive is awesome ");
                Changecase.changecase("Alive is awesome ");
        
            }
        }
        

        【讨论】:

        • 这段代码不会改变字符串中的大小写,而只是打印改变大小写的字符。对于不是字母或空格的字符,它无法打印任何内容。它根本不处理非 ASCII 字符。提问者的代码失败的原因是它应该在 65...90 范围内的字符中减去 32,而不是加 32。
        【解决方案9】:
        public class MyClass
        {
            private String txt;
            private char lower;
            public MyClass(String txt)
            {
                this.txt = txt;
            }
            public void print()
            {
                for(int i=0;i<txt.length();i++)
                {
                    if('A' <= txt.charAt(i) && txt.charAt(i) <= 'Z')
                    {
                        lower = (char)(txt.charAt(i) + 32);
                        System.out.print(lower);
                    }
                    else
                    {
                        lower = txt.charAt(i);
                        System.out.print(lower);
                    }
                }
            }
            public static void main(String[] args)
            {
                MyClass mc = new MyClass("BaNaNa");
                mc.print();
            }
        }
        

        很抱歉来晚了,但这应该可以解决。一个 else 条件,因为当它不为零时,它会完全丢弃字母表。

        【讨论】:

          【解决方案10】:

          如果有人需要没有 MagicNumbers 的清晰代码并且尽可能少的转换,这是我的解决方案:

          final char[] charArray = new char[string.length()];
          for (int i = 0; i < string.length(); i++) {
              char c = string.charAt(i);
              charArray[i] = Character.isLowerCase(c) ? Character.toUpperCase(c) : Character.toLowerCase(c);
          }
          String.valueOf(charArray);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-21
            • 2018-08-17
            • 2014-11-07
            • 1970-01-01
            • 2022-01-24
            • 1970-01-01
            • 2011-01-23
            相关资源
            最近更新 更多