如何将小写字母转换为大写字母和大写字母转换为小写字母

9

轮流显示在文本框中输入的任何文本

//     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**
                }               
         }}     
    });

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

16

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 - Luiggi Mendoza
2
@LuiggiMendoza 我在你编辑问题的时候正在写作 ;) - MadProgrammer

5

您不必跟踪是否已将字符从大写更改为小写。您的代码已经在这方面做到了,因为它基本上是这样的:

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行处理下一个字符。
如果你从z开始,在第2行的if将直接将你发送到第5行,其中它将被转换为大写。任何既不是大写也不是小写的东西都将无法通过两个if语句,因此保持不变。

4

这是一种更好的方法 :-

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

4
你可以使用来自org.apache.commonsStringUtils.swapCase()

3
问题在于您试图在检查原始字符串中的每个字符后设置SecondTextField的值。您应该一次处理一个字符,然后将结果设置到SecondTextField中。
当您遍历原始字符串时,从空字符串开始组合输出。保持附加相反情况下的字符,直到用完所有字符。一旦输出准备好了,请将其设置到SecondTextField中。
您可以将输出设置为String,将其设置为空字符串"",并随着进展附加字符。这将起作用,但这是一种低效的方法。更好的方法是使用StringBuilder类,它允许您更改字符串而不丢弃整个字符串。

2

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

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

2
String name = "Vikash";
String upperCase = name.toUpperCase();
String lowerCase = name.toLowerCase();

6
请勿仅仅发布代码,需要提供一些说明或信息或者使用方法。例如,请参考这个回答 - Nazik

1
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);

你能详细解释一下你的答案吗?仅仅发布一段代码而没有任何文本通常不太有帮助。 - Noel Widmer

1
这里有另一个版本:
公共类 Palindrom {
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());
}

}


1
方法描述:
*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 "Welcome".toUpperCase() 返回一个新的字符串,WELCOME

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接