【问题标题】:how to convert Lower case letters to upper case letters & and upper case letters to lower case letters如何将小写字母转换为大写字母和大写字母转换为小写字母
【发布时间】:2013-02-04 23:49:31
【问题描述】:

交替显示在文本框中输入的任何文本

//     in either Capital or lowercase depending on the original
//     letter changed.  For example:  CoMpUtEr will convert to
//     cOmPuTeR and vice versa.
    Switch.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e )

            String characters = (SecondTextField.getText()); //String to read the user input
            int length = characters.length();  //change the string characters to length

         for(int i = 0; i < length; i++)  //to check the characters of string..
         {             
            char character = characters.charAt(i);          

            if(Character.isUpperCase(character)) 
            {
                SecondTextField.setText("" + characters.toLowerCase());

            }
            else  if(Character.isLowerCase(character))
            {
                 SecondTextField.setText("" + characters.toUpperCase()); //problem is here, how can i track the character which i already change above, means lowerCase**
                }               
         }}     
    });

【问题讨论】:

  • 你有一个else,所以如果它以大写开头,它不会通过if的第二个分支。如果它以小写字母开头,它将通过第二个分支(而不是第一个)-您实际上遇到了什么问题?
  • 同意。看起来它应该已经工作了
  • 哦,我明白了问题.. 不要设置 characters.toUpperCase() 或类似的。一次只能更改一个字符。您的循环已经设置为这样做,但是您正在更改整个字符串的大小写。

标签: java string uppercase lowercase


【解决方案1】:

如果您查看字符 a-z,您会发现所有字符的第 6 位都设置为 1。其中 A-Z 中的第 6 位未设置。

A = 1000001    a = 1100001
B = 1000010    b = 1100010
C = 1000011    c = 1100011
D = 1000100    d = 1100100     
...
Z = 1011010    z = 1111010

所以我们需要做的就是遍历给定字符串中的每个字符,然后用32 执行XOR(^)。这样第6位就可以交换了。

查看以下代码,无需使用任何if-else 条件即可简单地更改字符串大小写。

public final class ChangeStringCase {
    public static void main(String[] args) {
        String str = "Hello World";
        for (int i = 0; i < str.length(); i++) {
            char ans = (char)(str.charAt(i) ^ 32);
            System.out.print(ans); // Final Output: hELLO wORLD
        }
    }
}

时间复杂度:O(N) 其中N = 字符串的长度。

空间复杂度:O(1)

【讨论】:

    【解决方案2】:

    方法说明:

    *toLowerCase()* Returns a new string with all characters converted to lowercase.
    
    *toUpperCase()* Returns a new string with all characters converted to uppercase.
    
    

    例如:

    "Welcome".toLowerCase() 返回一个新字符串,欢迎

    "Welcome".toUpperCase() 返回一个新字符串,WELCOME

    【讨论】:

      【解决方案3】:
          String str1,str2;
          Scanner S=new Scanner(System.in);
          str1=S.nextLine();
          System.out.println(str1);
          str2=S.nextLine();
          str1=str1.concat(str2);
          System.out.println(str1.toLowerCase()); 
      

      【讨论】:

      • 也给它一些解释。
      • 这并不能解决问题
      【解决方案4】:
      //This is to convert a letter from upper case to lower case
      import java.util.Scanner;
          public class ChangeCase {
              public static void main(String[]args) {
      
                  String input;
                  Scanner sc= new Scanner(System.in);
                      System.out.println("Enter Letter from upper case");
                      input=sc.next();
      
                  String result;
                  result= input.toLowerCase();
                  System.out.println(result);
              }
          }
      

      【讨论】:

        【解决方案5】:
        StringBuilder b = new StringBuilder();
        
        Scanner s = new Scanner(System.in);
        String n = s.nextLine();
        
        for(int i = 0; i < n.length(); i++) {
            char c = n.charAt(i);
        
            if(Character.isLowerCase(c) == true) {
                b.append(String.valueOf(c).toUpperCase());
            }
            else {
                b.append(String.valueOf(c).toLowerCase());
            }
        }
        
        System.out.println(b);
        

        【讨论】:

        • 你能详细说明你的答案吗?发布一段没有任何文字的代码通常不是很有帮助。
        【解决方案6】:

        这是一种更好的方法,不使用任何字符串函数。

        public static String ReverseCases(String str) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < str.length(); i++) {
              char temp;
              if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {
                temp = (char)(str.charAt(i) - 32);
              }
              else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z'){
                temp = (char)(str.charAt(i) + 32);
              }
              else {
                temp = str.charAt(i);
              }
        
              sb.append(temp);
            }
            return sb.toString();
          }
        

        【讨论】:

          【解决方案7】:
          import java.util.Scanner;
          class TestClass {
              public static void main(String args[]) throws Exception {
                  Scanner s = new Scanner(System.in);
                  String str = s.nextLine();
                  char[] ch = str.toCharArray();
                  for (int i = 0; i < ch.length; i++) {
                      if (Character.isUpperCase(ch[i])) {
                          ch[i] = Character.toLowerCase(ch[i]);
                      } else {
                          ch[i] = Character.toUpperCase(ch[i]);
                      }
                  }
                  System.out.println(ch);
              }
          }
          

          【讨论】:

            【解决方案8】:
            public class Toggle {
            public static String toggle(String s) {
                char[] ch = s.toCharArray();
            
                for (int i = 0; i < s.length(); i++) {
                    char charat = ch[i];
                    if (Character.isUpperCase(charat)) {
                        charat = Character.toLowerCase(charat);
                    } else
                        charat = Character.toUpperCase(charat);
                    System.out.print(charat);
                }
                return s;
              }
            
            public static void main(String[] args) {
                toggle("DivYa");
               }
              }
            

            【讨论】:

            • 虽然欢迎使用此代码 sn-p,并且可能会提供一些帮助,但它会是 greatly improved if it included an explanation of howwhy 这解决了问题。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
            【解决方案9】:
            String name = "Vikash";
            String upperCase = name.toUpperCase();
            String lowerCase = name.toLowerCase();
            

            【讨论】:

            • 请不要简单地发布代码。提供有关您的代码的一些解释或信息或用法。例如,请参阅this answer
            【解决方案10】:

            这是其他版本:

            公共类回文{

            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("Enter a word to check: ");
                String checkWord = sc.nextLine();
                System.out.println(isPalindrome(checkWord));
                sc.close();
            
            }
            
            public static boolean isPalindrome(String str) {        
                StringBuilder secondSB = new StringBuilder();
                StringBuilder sb = new StringBuilder();
                sb.append(str);
                for(int i = 0; i<sb.length();i++){
                    char c = sb.charAt(i);
                    if(Character.isUpperCase(c)){
                        sb.setCharAt(i, Character.toLowerCase(c));
                    }
                }
                secondSB.append(sb);
                return sb.toString().equals(secondSB.reverse().toString());
            }
            

            }

            【讨论】:

              【解决方案11】:
              public static void main(String[] args) {
                  Scanner scanner = new Scanner(System.in);
                  String satr=scanner.nextLine();
                  String newString = "";
                  for (int i = 0; i < satr.length(); i++) {
                      if (Character.isUpperCase(satr.charAt(i))) {
                          newString+=Character.toLowerCase(satr.charAt(i));
                      }else newString += Character.toUpperCase(satr.charAt(i));
                  }
                  System.out.println(newString);
              }
              

              【讨论】:

              • 嗨 Umarjon,在未来的答案中,请尝试在您的答案中添加简短说明,以帮助发布问题的用户了解您的解决方案并从中学习
              【解决方案12】:

              这是一个更好的方法:-

              void main()throws IOException
              {
                  System.out.println("Enter sentence");
                  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                  String str = br.readLine();
                  String sentence = "";
                  for(int i=0;i<str.length();i++)
                  {
                      if(Character.isUpperCase(str.charAt(i))==true)
                      {
                          char ch2= (char)(str.charAt(i)+32);
                          sentence = sentence + ch2;
                      }
                      else if(Character.isLowerCase(str.charAt(i))==true)
                      {
                          char ch2= (char)(str.charAt(i)-32);
                          sentence = sentence + ch2;
                      }
                      else
                      sentence= sentence + str.charAt(i);
              
                  }
                  System.out.println(sentence);
              }
              

              【讨论】:

                【解决方案13】:

                setText 正在将文本内容更改为您提供的内容,而不是附加内容。

                先从字段中转换String,然后直接应用...

                String value = "This Is A Test";
                StringBuilder sb = new StringBuilder(value);
                for (int index = 0; index < sb.length(); index++) {
                    char c = sb.charAt(index);
                    if (Character.isLowerCase(c)) {
                        sb.setCharAt(index, Character.toUpperCase(c));
                    } else {
                        sb.setCharAt(index, Character.toLowerCase(c));
                    }
                }
                
                SecondTextField.setText(sb.toString());
                

                【讨论】:

                • 你比我快=\,还是+1
                • @LuiggiMendoza 我在你编辑问题时正在写 ;)
                【解决方案14】:

                您可以从org.apache.commons 使用StringUtils.swapCase()

                【讨论】:

                  【解决方案15】:

                  问题是您在检查原始字符串中的每个字符后尝试设置SecondTextField 的值。您应该“在一边”进行转换,一次一个字符,然后才将结果设置为SecondTextField

                  当您浏览原始字符串时,开始从一个空字符串组合输出。继续在相反的情况下附加字符,直到字符用完。输出准备好后,将其设置为SecondTextField

                  您可以将输出设为String,将其设置为空字符串"",并在执行过程中附加字符。这会奏效,但这是一种低效的方法。更好的方法是使用 StringBuilder 类,它可以让您更改字符串而不会丢弃整个内容。

                  【讨论】:

                    【解决方案16】:

                    您不必跟踪您是否已经将角色从上更改为下。您的代码已经这样做了,因为它基本上是:

                    1   for each character x:
                    2       if x is uppercase:
                    3           convert x to lowercase
                    4       else:
                    5           if x is lowercase:
                    6                convert x to uppercase.
                    

                    你有 else 的事实(在第 4 行)意味着一个最初是大写的字符将永远不会在第二个 if 语句(在第 5 行)中检查。

                    例如,以A 开头。因为是大写,所以会在线转成小写 3 然后您将返回到第 1 行的 next 字符。

                    如果您以 z 开头,第 2 行的 if 将直接将您发送到第 5 行,在那里它将被转换为大写。任何既不是大写也不是小写的东西都将失败两个 if 语句,因此保持不变。

                    【讨论】:

                      最近更新 更多