2017-04-10 49 views
3

我正在慢慢地嘗試編寫一個將十六進制數轉換爲小數的程序。我不想讀完完整的,衆所周知的代碼,因爲我想自己做。我有一個想法,但有一些干擾我。小程序 - 我怎樣才能使這個代碼的字符串而不是字符?

import java.util.Scanner; 
public class Test{ 
    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     String any = input.nextLine(); 
     char[] cArray = any.toCharArray(); 
     for(int i=0; i<cArray.length; i++){ 
      System.out.print(cArray[i]+" "); 
     } 
    } 
} 

Input: ab12 
Output: a b 1 2 

我想更換a10b11c12

它的工作原理,如果我加入了環內的if語句。

 for(int i=0; i<cArray.length; i++){ 
      if(cArray[i] == 'a'){ 
       cArray[i] = '10'; // doesn't work, read below 
      } 
      System.out.print(cArray[i]+" "); 
     } 

問題是我想更換a1010不是人物了,因爲它是由兩個字母。這就是爲什麼我想知道如何使代碼與strings而不是characters工作?

回答

5

提示

'a' - 87 = 10 

所以,你可以使用:

(int) cArray[i] - 87 

因爲:

(int)'a' = 97 

希望你明白了。

5

而是在cArray更換價值觀,我想創建一個StringBuilder,和所有的值追加到(因爲可能你只是想打印出結果): -

StringBuilder str = new StringBuilder(); 

for(int i=0; i<cArray.length; i++){ 
     if(cArray[i] == 'a'){ 
      str.append(10); 
     } else if (cArray[i] == 'b'){ 
      [etc] 
     } else { 
      str.append(cArray[i]); 
     } 
} 

System.out.print(str.toString()); 
+1

簡單有效的史蒂夫。 – davidxxx

1

我猜你想在提取它們後訪問轉換後的十進制數字。使用List字符串來存儲你的輸出

Scanner in = new Scanner(System.in); 
    String any = in.nextLine(); 
    char[] cArray = any.toCharArray(); 
    List<String> output = new ArrayList<String>(); 
    for(int i=0; i<cArray.length; i++){ 
     if(cArray[i] >= 'a'){ // Strore a,b,c,d,e 
      output.add(String.valueOf(10+(cArray[i]-'a'))); 
     } else { // Store numbers 
      output.add(String.valueOf(cArray[i])); 
     } 
    } 
    for(String s : output){ 
     System.out.println(s); 
    } 
1

讓我們來看看這個:

if (cArray[i] == 'a') { 
     cArray[i] = '10'; 
    } 

這不是有效Java的一對夫婦的原因:

  1. '10'不一個有效的文字。它不是一個字符文字,因爲有兩個字符......並且字符文字只能表示一個字符。它也不是一個字符串字面值,因爲一個String字面值被雙引號字符括起來;例如"10"

  2. 假設我們將'10'更改爲"10" ...這仍然是錯誤的。現在的問題是cArray[i] = "10";正在將一個String對象分配給一個字符數組。

接下來的問題是你不能「插入」到數組中。數組有固定大小。數組的大小不能改變(除非你創建一個新數組)。你所能做的就是在給定的位置更新角色。

但這在這裏也不起作用。您可以嘗試將字符移至右側以騰出額外字符的空間。但是,那麼陣列中沒有足夠的空間來容納所有字符。

總之,您需要將修改/重寫的字符表示爲新的數據結構。 StringBuilder類是最合適的。請參閱@史蒂夫史密斯的解答使用StringBuilder的答案。

1

爲了與一個字符串,而不是字符代碼工作的字符數組改變爲字符串數組:

 Scanner input = new Scanner(System.in); 
     String any = input.nextLine(); 
     //char[] cArray = any.toCharArray(); // first change this line 
     String [] cArray = any.split(""); // split input into single characters as string 
     for(int i=0; i<cArray.length; i++){ 
      System.out.print(cArray[i]+" "); 
     } 

     for(int i=0; i<cArray.length; i++){ 
      if(cArray[i].equals("a")){   // use String.equals("anotherString") method to check equality 
       cArray[i] = "10"; 
      } 
      System.out.print(cArray[i]+" "); 
     } 
相關問題