因此,我試圖將字母表中的每個字母設置爲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。
因此,我試圖將字母表中的每個字母設置爲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。
您可以從每個字符中減去'a'
並添加1
。例如。
String input = "cat";
for (char c : input.toCharArray()) {
System.out.print(c - 'a' + 1);
}
您發佈不編譯因爲你無法分配String
到int
和char
的代碼是一個保留字(基本類型的名稱)
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));
兩個版本只能用於小寫英文字母(a
到z
)
分配一個號碼一個字符被稱爲「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就足夠了。
這樣做的最佳方式是將字符串轉換爲一個字節[],如下所示:
char[] buffer = str.toCharArray();
然後,每個字符可被轉化爲它們的字節值(它是用於一個常量某些編碼),如下所示:
byte[] b = new byte[buffer.length];
for (int i = 0; i < b.length; i++) {
b[i] = (byte) buffer[i];
}
現在查看結果值並減去/添加一些值以獲得所需的結果!
爲什麼你需要一個字節數組呢? char數組足以使用「減/添加」來獲得「期望的結果」。 – Tom
爲什麼不把文本轉換爲ASCII並且減去64(大寫)或96(小寫)? – Arc676
查看http://www.asciitable.com它顯示了字母到數字的映射,@ Arc676爲您提供了很好的解決方案。 – user1697575
你甚至不需要明確地減去96.你可以做'字符'''' – resueman