Java 将字母转换为数字2

Java 将字母转换为数字2,java,Java,指 在文件test.In.rtf中,我键入了'abcd'。然而,当我运行程序时,我得到了????????在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.Prin

在文件
test.In.rtf
中,我键入了'abcd'。然而,当我运行程序时,我得到了
????????在
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);
    }

}

我很确定你想要

sb.append(Integer.toString(c - 'a' + 1));
或者干脆

sb.append( c - 'a' + 1 );
它隐式地做了同样的事情,因为表达式
c-'a'+1
隐式地转换为
int
,因为Java首先将所有的非
long
整数数学(任何涉及
char
s、
byte
s、
short
s和/或
int
s)转换为
int
s


您将整数结果强制转换为
字符
,该字符将由ASCII值为该数字的字符(b/w 1和26)表示,该字符不可读。

我很确定您想要

sb.append(Integer.toString(c - 'a' + 1));
或者干脆

sb.append( c - 'a' + 1 );
它隐式地做了同样的事情,因为表达式
c-'a'+1
隐式地转换为
int
,因为Java首先将所有的非
long
整数数学(任何涉及
char
s、
byte
s、
short
s和/或
int
s)转换为
int
s


您将整数结果强制转换为字符,该字符将由ASCII值为该数字的字符(b/w 1和26)表示,该字符不可读。

您正在尝试写入字符值1、2、3和4('a'-'a'+1=1等等),这些字符都是“不可写的”,因此是“?”s。为什么你得到7分而不是4分?我不知道-可能是一个区域设置问题,或者其中的3个只是写为两个“?”

您试图写字符值1、2、3和4('a'-'a'+1=1等等),它们都是“不可写的”,因此是“?”s。为什么你得到7分而不是4分?我不知道-可能是一个区域设置问题,或者其中的3个被写成两个“?”

我正在尝试将字母转换为数字,其中a=1,b=2,c=3,d=4,z=26…调试是乐趣的一部分:)RTF文件是二进制文件。你不能像处理字符串数据一样处理它们。@skaffman它们不是二进制的。这是一种标记语言,您可以对其进行解析,但它不是很琐碎。@trutheality:Good point。我的错误。我正在尝试将字母转换为数字,其中a=1,b=2,c=3,d=4,z=26…调试是乐趣的一部分:)RTF文件是二进制文件。你不能像处理字符串数据一样处理它们。@skaffman它们不是二进制的。这是一种标记语言,您可以对其进行解析,但它不是很琐碎。@trutheality:Good point。我错了。不,我得到了27-418206-47-4114199-41141993167-47-46-43-46-4315315118206-47-48-45-40-431531511921218206-45-43-48。请问
test.in.rtf
是一个文件吗?因为这只适用于文本文件。不,我得到27-418206-47-4114199-41141993167-47-46-43-46-4315315118206-47-48-45-40-431531511921218206-45-43-48。不知怎的,
test.in.rtf
是一个文件吗?因为这只适用于文本文件。