2013-05-17 36 views
0

我可能在這裏有點愚蠢,但我似乎無法想到這個問題的直接解決方案。Java ASCII控制代碼到文字值

我目前得到一個int [],其中包含ASCII字符代碼,但是,對於ASCII表,任何值< 32是一個控制代碼。所以我需要做的是對於大於32的任何值,將ASCII字符放到char []中,但是如果它是< 32,只需將文字整數值作爲字符。

例如:

public static void main(String[] args) { 
    int[] input = {57, 4, 31}; //57 is the only valid ASCII character '9' 
    char[] output = new char[3]; 

    for (int i = 0; i < input.length; i++) { 
     if (input[i] < 32) { //If it's a control code 
      System.out.println("pos " + i + " Not an ascii symbol, it's a control code"); 
      output[i] = (char) input[i]; 
     } else { //If it's an actual ASCII character 
      System.out.println("pos " + i + " Ascii character, add to array"); 
      output[i] = (char) input[i]; 
     } 
    } 

    System.out.println("\nOutput buffer contains:"); 
    for (int i = 0; i < output.length; i++) { 
     System.out.println(output[i]); 

    } 
} 

輸出是:

pos 0 Ascii character, add to array 
pos 1 Not an ascii symbol, it's a control code 
pos 2 Not an ascii symbol, it's a control code 

Output buffer contains: 
9 // int value 57, this is OK 

正如你可以看到數組中的最後兩個項目都是空白,因爲沒有實際的或者4的ASCII字符,或31.我知道有一些方法可以將Strings轉換爲char[],但是當你已經有了一個你想要值的char []時,總的想法是什麼。

這可能是一個非常簡單的解決方案,我想我只是有一個愚蠢的時刻!

任何意見將不勝感激,謝謝!


+0

也許字符打印空白? – Evans

+0

問題是,ASCII表<31中的任何int值不是字母數字字符,在這種情況下,我只想要文字值,例如, '4'和'31'。 – Tony

+0

他們實際上是打印的。問題是,一些控制字符表示爲int可能有兩個數字,所以他們可能不會是字符... – Mateusz

回答

1

對於分類字符,您應該使用Character.getType(char)方法。

要存儲字符或整數,你可以嘗試使用包裝器對象來做到這一點。

或者你可以換你char這樣的:

static class NiceCharacter { 
    // The actual character. 
    final char ch; 

    public NiceCharacter (char ch) { 
    this.ch = ch; 
    } 

    @Override 
    public String toString() { 
    return stringValue(ch); 
    } 

    public static String stringValue (char ch) { 
    switch (Character.getType(ch)) { 
     // See http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters for what the Cc group is. 
     // See http://en.wikipedia.org/wiki/Control_character for a definition of what are CONTROL characters. 
     case Character.CONTROL: 
     return Integer.toString(ch); 

     default: 
     return Character.toString(ch); 
    } 
    } 
} 
+0

只是票,謝謝! – Tony

0

改變你的打印輸出緩衝

​​