2015-11-10 57 views
0

因此,我試圖將字母表中的每個字母設置爲a = 1 b = 2 c = 3等等。將每個字母表設置爲一個數字

int char = "a"; 
int[] num = new int{26}; 
for (int i = 0; i <num.length; i++){ 
System.out.print(i); 

但之後,我得到了Stuck,所以如果你可以幫助我。所以當用戶輸入一個像貓這樣的詞時,它會輸出3-1-20。

+3

爲什麼不把文本轉換爲ASCII並且減去64(大寫)或96(小寫)? – Arc676

+2

查看http://www.asciitable.com它顯示了字母到數字的映射,@ Arc676爲您提供了很好的解決方案。 – user1697575

+2

你甚至不需要明確地減去96.你可以做'字符'''' – resueman

回答

2

您可以從每個字符中減去'a'並添加1。例如。

String input = "cat"; 
for (char c : input.toCharArray()) { 
    System.out.print(c - 'a' + 1); 
} 

您發佈不編譯因爲你無法分配Stringintchar的代碼是一個保留字(基本類型的名稱)

int char = "a"; 

您也提到,你想要這樣的格式化輸出"3-1-20"。這是實現的一個方法:

String input = "cat"; 
String[] out = new String[input.length()]; 
for (int i = 0; i < input.length(); ++i) { 
    out[i] = Integer.toString(input.charAt(i) - 'a' + 1); 
} 
System.out.println(String.join("-", out)); 

兩個版本只能用於小寫英文字母(az

1

分配一個號碼一個字符被稱爲「encoding」。由於計算機只能在內部處理數字,所以這種情況一直髮生。即使這裏的文本被編碼(可能是編碼稱爲「UTF-8」),然後結果編號存儲在某處。

一個非常基本的編碼是所謂的ASCII(美國信息交換標準碼)。 ASCII已經做了你想要的,它給每個字符分配一個數字,只是「A」的數字是65而不是1。

那麼,這有什麼用呢?我們可以假定對於字符A-z,char的數值等於ASCII碼(對於每個字符都不是這樣,但對於最基本的字符來說,這足夠好)。

這就是爲什麼這裏的每個人都會告訴你減去'A'或'a':你的角色是一個字符,它是一個字符,也是該字符的數值,所以你可以減去'A'(再次,一個char),並添加1:

'B' - 'A' + 1 = 2 

因爲......

66 (numeric value of 'B') - 65 (numeric value of 'A') + 1 = 2 

其實,char是不是ASCII,但UTF-8,但它開始變得更加複雜略有位,所以ASCII就足夠了。

0

這樣做的最佳方式是將字符串轉換爲一個字節[],如下所示:

char[] buffer = str.toCharArray(); 

然後,每個字符可被轉化爲它們的字節值(它是用於一個常量某些編碼),如下所示:

byte[] b = new byte[buffer.length]; 
for (int i = 0; i < b.length; i++) { 
    b[i] = (byte) buffer[i]; 
} 

現在查看結果值並減去/添加一些值以獲得所需的結果!

+1

爲什麼你需要一個字節數組呢? char數組足以使用「減/添加」來獲得「期望的結果」。 – Tom

相關問題