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

16 回答 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());
于 2013-02-20T04:01:35.450 回答
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,则if第 2 行将直接将您发送到第 5 行,在那里它将被转换为大写。任何既不是大写也不是小写的东西都会使两个 if语句都失败,因此保持不变。

于 2013-02-20T03:59:50.553 回答
4

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

于 2013-02-20T04:04:33.907 回答
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);
}
于 2014-02-02T18:46:30.193 回答
3

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

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

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

于 2013-02-20T04:02:40.800 回答
2
String name = "Vikash";
String upperCase = name.toUpperCase();
String lowerCase = name.toLowerCase();
于 2014-01-29T05:31:03.803 回答
2

这是不使用任何 String 函数的更好方法。

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();
  }
于 2017-06-13T17:24:19.400 回答
1

这是其他版本:

公共类回文{

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

}

于 2015-10-14T14:53:46.017 回答
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);
于 2017-08-28T10:41:58.713 回答
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".toUpperCase()返回一个新字符串,欢迎

于 2019-07-03T04:58:20.113 回答
1

如果您查看 characters 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

所以我们需要做的就是遍历给定字符串中的每个字符,然后XOR(^)32. 这样,第 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)

于 2020-05-23T16:24:44.120 回答
0
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);
}
于 2015-04-19T06:22:19.687 回答
0
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");
   }
  }
于 2017-02-10T10:29:13.737 回答
0
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);
    }
}
于 2017-06-02T22:15:58.547 回答
0
//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);
        }
    }
于 2018-02-25T15:11:59.300 回答
-1
    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()); 
于 2018-06-08T09:43:23.873 回答