2013-02-20 207 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); 
     } 
    }