2013-05-17 33 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

改变你的打印输出缓冲

​​