2014-09-03 91 views
1

好的,我只是一個編程愛好者,所以對我來說很簡單。因此,我編寫了經典的切換案例程序,但沒有使用.toUpperCase()或.toLowerCase()函數,而是使用字符的ASCII值。我設法將大寫字母轉換爲低字節,但似乎不能做到相反。嘗試使用ASCII值切換案例

軟件包切換;

import java.util.Scanner; 

public class Toggle { 
    String str; 
    Scanner sc=new Scanner(System.in); 

    public void toggleStr() 
    { 
     System.out.println("Enter a string"); 
     str=sc.nextLine(); 
     char c; 
     int res; 
     char ch[]=str.toCharArray(); 

     for(int i=0;i<ch.length;i++) 
     { 
      res=(int)(ch[i]); 
      if((res>=65)||(res<=90)) 
      { 
       c=(char)(res+32); 
       System.out.print(c); 
      } 
      else if((res>=97)||(res<=122)) 
      { 
       c=(char)(res-32); 
       System.out.print(c); 
      } 

      else 
       System.out.print(ch[i]); 
     } 

    } 


    public static void main(String[] args) 
    { 
     Toggle t=new Toggle(); 
     t.toggleStr(); 
    } 
} 
+1

'如果((RES> = 65)||(RES <= 90))'所以如果res == 1這是真的嗎?不要以爲這就是你想要的。 – csmckelvey 2014-09-03 16:03:01

+0

如果您使用char文字而不是int文字(例如,'A'而不是65等等),這看起來會更好。 – 2014-09-03 16:50:21

+0

另外,FWIW,我們不再使用ASCII碼:Java是嚴格的Unicode。 'A' - 'Z'和'a' - 'z'的Unicode代碼點的值碰巧與舊的ASCII編碼具有相同的數值,但是當您想將'å'轉換爲大寫時會發生什麼?是的,TY。 – 2014-09-03 16:54:54

回答

3

||在兩種情況下應該是&&。任何數字大於65或小於90,因此無論字符如何,每次都會執行第一個if塊。

+0

是的,TY。正如我所說的業餘。 – 2014-09-03 16:03:38

2

從97到122的所有值都大於65,因此您的第一個if條件將包括小寫字母和大寫字母。您需要使用&&而不是||(而不是或)。

1

如果我們討論的是舊的好的ASCII表格,那麼每個小寫字母與大寫字母只有一位(2^5,6位)不同,用十進制32或十六進制0x20表示。

但是,如果我們談論的是XXI世紀的Unicode,我們可以使用Java標準庫函數。

下面我將展示兩個版本:

ASCII風格:

public String toggleAscii(String s) { 
    StringBuilder sb = new StringBuilder(s.length()); 

    for (int i = 0; i < s.length(); i++) { 
     char c = s.charAt(i); 
     if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') { 
      boolean isLower = (c & 0x20) == 0x20; // binary 100000 (sixth bit, 2^5) 
      c = (char) (isLower ? (c & 0xdf) : (c | 0x20)); 
     } 
     sb.append(c); 
    } 

    return sb.toString(); 
} 

統一風格:

public String toggle(String s) { 
    StringBuilder sb = new StringBuilder(s.length()); 

    for (int i = 0; i < s.length(); i++) { 
     char c = s.charAt(i); 
     boolean isUpper = Character.isUpperCase(c); 
     sb.append(isUpper ? Character.toLowerCase(c) : Character.toUpperCase(c)); 
    } 

    return sb.toString(); 
}