将字母转换为数字2

时间:2012-05-18 22:30:40

标签: java

请参阅Converting Letters to Numbers

在文件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);
    }

}

2 个答案:

答案 0 :(得分:2)

我很确定你想要

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

或只是

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

隐式地执行相同的操作,因为表达式c - 'a' + 1被隐式转换为int,因为Java会执行所有非long整数数学(涉及char s的任何内容,byte s,short和/或int s)首先将所有内容转换为int

你将整数结果转换为char,它将由ASCII值为该数字的字符(b / w 1和26)表示,这不是可读的。

答案 1 :(得分:1)

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