【问题标题】:Java Case SwitcherJava 大小写切换器
【发布时间】:2024-01-14 22:53:02
【问题描述】:

所以我正在编写一个小返回程序,用于切换字符串中字符的大小写,因此 HELLo 变为 hElLo,hello 变为 HeLlO,aaa 变为 AaA。不过我有点麻烦。我还是新手,正在学习 java,如果这违反了规则,我很抱歉:

public static String altCase(String text){
      String str = "";
      for (int i = 0; i <= text.length()-1; i++)
      {
        char ch = text.charAt(i);
        boolean lastIsUpperCase = true;
        if(Character.isUpperCase(i-1))
        {
          lastIsUpperCase = true;
        }
        else if(Character.isLowerCase(i-1))
        {
          lastIsUpperCase = false;
        }

        if(lastIsUpperCase)
        {
          str += Character.toLowerCase(ch);
        }   
        else if (!lastIsUpperCase)
        {
          str += Character.toUpperCase(ch);
        }
      }
      return str;
 }

【问题讨论】:

  • Character.isUpperCase(i-1) 是你的问题,Character.isLowerCase(i-1) 应该是……Character.isUpperCase(ch)Character.isLowerCase(ch)
  • 你必须解释问题是什么。然后,如果有任何错误,请添加错误消息。如果有堆栈跟踪,请添加堆栈跟踪。还可以通过添加注释来标记代码中发生错误的位置。编辑您的问题并将所有这些信息添加到问题中。记得格式化!
  • 仅供参考,但您的代码 sn-p 不包含任何开关案例。这比使用嵌套的 if 语句更实用...
  • i=1开始循环,而不是i=0
  • @ryekayo OP 正在尝试切换(更改)字符的大小写(字母大小写,大写或小写),而不是使用 switchcase

标签: java string char return case-sensitive


【解决方案1】:

我会使用StringBuilder 来建立返回值,您也可以使用String.toCharArray()for-each loop。最后,您可以测试一个字符是否为小写(或大写),然后交换大小写。类似的,

public static String altCase(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }
    StringBuilder sb = new StringBuilder(text.length());
    for (char ch : text.toCharArray()) {
        if (Character.isUpperCase(ch)) {
            sb.append(Character.toLowerCase(ch));
        } else if (Character.isLowerCase(ch)) {
            sb.append(Character.toUpperCase(ch));
        } else {
            sb.append(ch);
        }
    }
    return sb.toString();
}

【讨论】:

  • 我还是新手,还在学习 java,如果这违反了规则,很抱歉如果他是 java 新手,他很可能不明白 StringBuilder 类的作用,他也不会理解for (char ch : text.toCharArray()) 的for-each 循环。编写您理解的非复杂代码总是比使用您不理解的代码更好。
【解决方案2】:

您应该将 char 添加到 if 子句中,如下所示:

      String str = "";
      for (int i = 0; i <= text.length()-1; i++)
      {
        char ch = text.charAt(i);

        if(Character.isUpperCase(ch))
        {
          str += Character.toLowerCase(ch);
        }
        else if(Character.isLowerCase(ch))
        {
            str += Character.toUpperCase(ch);
        }


      }
      return str;
 }

【讨论】:

    【解决方案3】:

    您可以创建一个 char 数组,然后单独检查和交换每个元素。完成后,只需将该 char 数组作为参数传递给字符串,即可将其转换为字符串

    char[] word = new char[3];
    String str = new String(word); 
    

    【讨论】:

      【解决方案4】:

      所以我设法做到了。

      public static String altCase(String text){
            String str = "";
            str += Character.toUpperCase(text.charAt(0));
            for (int i = 1; i <= text.length()-1; i++)
            {
              char ch = text.charAt(i);
              boolean lastUp = flipFlop(i);
              char temp = switcher(ch, lastUp);
              str+=temp;
            }
            return str;
       }
       public static boolean flipFlop (int i){
            boolean bool = true;
            if(i==1){
              bool = true;
            }
            else if((i%2)==0)
            {
                 bool = false;
            }
            else if((i%2)!=0)
            {
                 bool = true;
            }
            return bool;
       }
       public static char switcher (char ch, boolean lastUp){
         char temp = ch;
         if(lastUp){
              temp = Character.toLowerCase(ch);
         }
         else if (lastUp==false){
           temp = Character.toUpperCase(ch);
         }
         return temp;
       }
      

      我添加了一个'flipFlop'方法来跟踪迭代,并且方法'switcher'根据最后一个字符的条件在大小写之间变化。 (当字符串中的最后一个字符为大写时,lastUp 为真)。

      【讨论】: