2013-02-20 206 views
7

或者显示在文本框中键入任何文本如何小写字母转换为大写字母和大写字母为小写字母

//  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 2013-02-20 03:59:28

+0

同意。看起来它应该已经工作了 – 2013-02-20 04:00:21

+0

哦,我看到了问题..不要设置characters.toUpperCase()或类似。一次只更改一个角色。你的循环已经被设置为这样做,但你正在改变整个字符串的情况。 – 2013-02-20 04:01:35

回答

14

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()); 
+0

你比我快= \,仍然+1 – 2013-02-20 04:02:03

+2

@LuiggiMendoza我在编辑问题时正在写作;) – MadProgrammer 2013-02-20 04:03:49

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语句,因此保持不变。

3

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

当您浏览原始字符串时,开始编写空字符串的输出。继续在相反的情况下追加角色,直到用完角色。输出准备就绪后,将其设置为SecondTextField

您可以输出一个String,将其设置为一个空字符串"",并随时附加字符。这会起作用,但这是一种效率低下的方法。更好的方法是使用StringBuilder类,它可以让您更改字符串而不会丢掉整个东西。

4

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

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

请不要简单地发布代码。提供一些关于您的代码的解释或信息或用法。例如,请参阅[此答案](http://stackoverflow.com/a/16893057/756941)。 – NAZIK 2014-01-29 05:50:50

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

您好Umarjon,在未来的答案尝试添加一个简短的解释,您的答案,这将有助于发布该问题的用户了解您的解决方案,并从 – Lupin 2015-04-19 06:31:19

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

}

0

下面是ASCII值的装置的类似的解决方案的另一个变体。

import java.io.*; 
import java.util.*; 
class example_2 
{ 
    static Scanner sc; 
    static PrintWriter out; 

    static void init() throws Exception 
    { 
     sc=new Scanner(new File("si.txt")); 
     out=new PrintWriter(new File("so.txt")); 
    } 

    public static void main(String args[]) throws Exception 
    { 
     init(); 
     char[] a=sc.next().toCharArray(); 
     for(int i=0;i<a.length;i++) 
     { 
      if(a[i]>=97 && a[i]<=122) 
      { 
       a[i]-=32; 
      } 
      else 
      { 
       a[i]+=32; 
      } 
     } 
     for(char ch:a) 
     { 
      out.print(ch); 
     } 
     out.close(); 
    } 
} 
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"); 
    } 
    } 
+1

学习尽管此代码段是受欢迎的,并可能提供一些帮助,它会[大大改进,如果它包含解释](// meta.stackexchange.com/q/114762)的* how *和* why *解决了这个问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 – 2017-02-10 10:38:23

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

你能否详细说明你的答案?发表一段没有任何文字的代码往往不是很有帮助。 – 2017-08-28 11:00:21

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