2014-09-03 61 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(); 
}