0

我在这里可能有点愚蠢,但我似乎想不出一个直接解决这个问题的方法。

我目前有一个包含 ASCII 字符代码的 int[],但是,对于 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 或 31 都没有 ASCII 字符。我知道有转换Strings为的方法char[],但是当您已经有了一个 char[] 你想要的值。

可能有一个非常简单的解决方案,我想我只是有一个愚蠢的时刻!

任何建议将不胜感激,谢谢!


4

2 回答 2

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);
    }
  }
}
于 2013-05-17T12:53:10.483 回答
0

更改打印输出缓冲区的方式

for (int i = 0; i < output.length; i++) {
    if (output[i] < 32){
        System.out.println("'" + (int)output[i] + "'"); //Control code is casted to int.
        //I added the ' ' arround the value to know its a control character
    }else {
        System.out.println(output[i]); //Print the character
    }
}
于 2013-05-17T12:57:24.387 回答