0

请参阅将字母转换为数字

在文件test.in.rtf中,我输入了“abcd”。但是,当我运行程序时,我??? ??????????? ???????? plus maybe a few more进入test.out.rtf. 为什么是这样?我错过了什么吗?

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class Test {

    public static void main(String[] args) throws IOException  {

        BufferedReader f = new BufferedReader(new FileReader("test.in.rtf"));

        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out.rtf")));

        StringTokenizer st = new StringTokenizer(f.readLine());


        StringBuilder sb = new StringBuilder();

        for (char c : st.nextToken().toCharArray()) {
            sb.append((char)(c - 'a' + 1));
        }

        out.println(sb);                           // output result
        out.close();                                  // close the output file
        System.exit(0);
    }

}
4

2 回答 2

2

我很确定你想要

sb.append(Integer.toString(c - 'a' + 1));

或者干脆

sb.append( c - 'a' + 1 );

它隐含地做同样的事情,因为表达式c - 'a' + 1被隐式转换为 an,int因为 Java通过首先将所有内容转换为s 来执行所有非long整数数学运算(涉及chars、bytes、shorts 和/或s 的任何事情) 。intint

您将整数结果转换为 a 的内容char,这将由其 ASCII 值为该数字(黑白 1 和 26)的字符表示,这是不可读的。

于 2012-05-18T22:36:21.080 回答
1

您正在尝试编写 char 值 1、2、3 和 4('a'-'a' + 1 = 1 等等),它们都是“不可写的”,因此是“?”。为什么你得到 7 而不是 4?我不知道 - 可能是语言环境问题,或者其中 3 个只是写成两个“?”。

于 2012-05-18T22:42:33.080 回答