Java字符串程序

时间:2013-06-24 14:46:05

标签: java bufferedreader

我正在尝试使用BufferedReader执行字符串程序,其中您从用户获取字符串并更改字母的大小写。 这是我到目前为止所得到的:

import java.io.*;
public class StringProg {
    public void ff()throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a sentence");
        String str=br.readLine();
        String s="";
        int l=str.length();
        char c;
        for(int a = 1; a < l; a++) {
            c = str.charAt(a);
            char d = 0;
            if(c >= 97 && c <= 122) {
                d = c - 32;
            } else if(c >= 65 && c <= 90) {
                d = c + 32;
            }
         System.out.print(d);
        }
    }
}

当我运行它时,它说“可能会丢失精度;需要char;找到int” 有人可以帮我纠正这个吗?

更新: 这是更正后的新代码:

import java.io.*;
 public class StringProg
  {
    public void ff()throws IOException
   {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter a sentence");
    String str=br.readLine();
    String s="";
    int l=str.length();
    char c;
    char d;
    for(int a=1;a<l;a++)
    {
        c=str.charAt(a);
        if(c>=97 && c<=122)
        {
             d= (char)(c-32);
        }
        else if(c>=65 &&c<=90);
        {
            d=(char)(c+32);
        }
     System.out.print(d);
    }
    }
}

但输出不起作用。有人可以指出我的错误吗? 当我输入“a”或“b”时,没有输出但是当我输入“E”时它变为“e”,但当我输入“HidE”时它变为2个方格(我不知道如何打印它在键盘上)和“e”。

4 个答案:

答案 0 :(得分:3)

char d= c-32;

c-32 表达式导致int(因为32将被视为int)并且您正在尝试将int值分配给char类型,这就是为什么你会“可能失去精度误差”。您需要将32显式转换为char(或)右侧的整个表达式char

同样的规则同样适用于char d=c+32;语句以及其他已使用char类型的int值的地方。

答案 1 :(得分:2)

char d = (char) (c-32); // note the parentheses
char d = (char) (c+32); // around (char + int); see below
  • 32是一个int字面值。由(char + int)算术得出的表达式也是int类型。由于char的范围是int的子集,编译器会抱怨潜在的精度损失。通过显式转换为(char),您可以有效地告诉编译器您知道自己在做什么。

  • 注意,算术表达式(c+32)周围的括号。如果没有它,编译器会将其评估为(char)(c) + 32,由于投射的优先级较高,再次导致int

答案 2 :(得分:0)

一旦进行计算,只需将其转换回char。例如, char d = (char)(c - 32)。 它基本上只是希望你澄清并让程序知道你希望它来回转换。

答案 3 :(得分:0)

这是因为当你向一个字符添加一个int它变成一个int时,你会尝试(隐式)将该int转换回一个char,而int可能不适合&#34; ; char,所以你得到一个错误

让我们说c =&#39; A&#39;,所以65

char d= c+32
char d= 65+32
char d= 97;

现在97可能对应一个有效的字符,但我们不能知道在编译时(原则上它可以是任何整数),如果int太大或太小而不适合然后把它的一部分扔掉;因此警告。您可以将它投射到(char)表示您接受,但整个过程并不是很好。

char d= (char)(c+32);

所有这些看起来像检查大小写并设置为小写(反之亦然)。如果是这样;不要这样做,真的很不清楚,使用:

c=str.charAt(a);
if(Character.isUpperCase(c)){
     char d=Character.toLowerCase(c);
}