2012-05-18 84 views
0

參考Converting Letters to Numbers轉換字母與數字2

在文件test.in.rtf,我已經 'ABCD' 類型。但是,當我運行該程序時,我在test.out.rtf中獲得了??? ??????????? ???????? plus maybe a few more。爲什麼是這樣?我錯過了什麼嗎?

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); 
    } 

} 
+0

我試圖將字母轉換爲數字,其中a = 1,b = 2,c = 3,d = 4,z = 26 ... – Anonymous181

+0

這是爲了樂趣 – Anonymous181

+1

調試是樂趣的一部分:) –

回答

2

我敢肯定你想

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

你把整數結果轉換成一個char,它將由ASCII值爲該數字的字符(某些b/w 1和26)表示,這是不可讀的。

+0

不,我以某種方式得到27-418206-47-4114199-41141993167-47-46-43-46-4315315118206-47-48-45-40-431531511921218206-45-43-48。 – Anonymous181

+1

是否有'test.in.rtf'一個[Rich Text Format](http://en.wikipedia.org/wiki/Rich_Text_Format)文件?因爲這隻適用於文本文件。 – trutheality

+0

耶謝謝,我修好了。這是一個rtf。 – Anonymous181

1

您正在嘗試寫入字符值1,2,3和4('a' - 'a'+ 1 = 1等等),它們都是「不可寫的」,因此是「?」。爲什麼你得到7而不是4?我不知道 - 可能是一個語言環境問題,或者其中的3個只是寫成兩個「?」。