好的,我只是一个编程的业余爱好者,所以对我很轻松。因此,我编写了经典的切换案例程序,但没有使用.toUpperCase()或.toLowerCase()函数,而是使用字符的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();
}
}
答案 0 :(得分:3)
||
应为&&
。任何数字都大于65或小于90,因此每次执行第一个if
块,无论字符如何。
答案 1 :(得分:2)
97到122之间的所有值都大于65,因此您的第一个if
条件将包括小写字符和大写字符。您需要使用&&
代替||
(而不是或)。
答案 2 :(得分:1)
如果我们谈论好的旧ASCII表,那么每个小写字母与大字母的区别仅在于由十进制32或十六进制0x20表示的一位(2 ^ 5,6位)。
但如果我们谈论的是XXI世纪的unicode,我们可以使用java std库函数。
下面我展示了两个版本:
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();
}
Unicode样式:
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();
}