如何根据Java中特定范围的ascii字符旋转单个字符?

时间:2014-01-04 06:12:20

标签: java

我正在尝试提出一个接受字符和数字的函数。该数字是角色应“旋转”的次数。接受的ASCII码是32到126。

rotate的示例=如果字符“A”旋转两次,它将以字符“C”结束。如果“A”旋转三次,它最终会变成字母“D”。如果你看一下ASCII表:

http://www.jimprice.com/ascii-0-127.gif

鉴于我的ASCII值限制为32到126 ... ascii值065旋转将为ascii值067.ascii值124旋转5次将ascii值34。

例如:

  1. 如果我通过了功能“!” (ASCII码33)和数字2, 输出字符应为“#”(ASCII码35)。
  2. 如果我通过“}” (ASCII码125)和数字3,我应该得到输出字符 “!” (ASCII码33)。
  3. 在java中完成此操作的最佳方法是什么(如果你想以相反的方式旋转,它是否可以支持旋转距离的负数而不是正数)?

4 个答案:

答案 0 :(得分:1)

尝试类似:

static char rotate(char c, int distance) {
    assert 32 <= c && c < 127;
    if (distance < 0) distance = distance % (127 - 32) + 127 - 32;
    return (char) ((c + distance - 32) % (127 - 32) + 32);
}

编辑:添加if (distance ...行以支持负距离。

答案 1 :(得分:0)

这样做

  public static char numToChar(int num,int rotate){
       int result = num+rotate;
       if(result>126){         
          result =31+(result-126);
       }
       return (char)result;
  }

System.out.println(numToChar(33,2));
System.out.println(numToChar(125,3));

<强>输出

#
!

答案 2 :(得分:0)

您可以使用此方法

public static char rotateChar(char in, int shift) {
  /* cast char to int */
  int v = (int) in;
  /* to cover wrap-around */
  v += (shift % 95);
  /* 32 - 126 = -95 */
  return (char) ((v > 126) ? v - 95 : v);
}

public static void main(String[] args) {
  System.out.printf("! + 2 = %s\n",
      String.valueOf(rotateChar('!', 2)));
  System.out.printf("} + 3 = %s\n",
      String.valueOf(rotateChar('}', 3)));
  System.out.printf("b - 1 = %s\n",
    String.valueOf(rotateChar('b', -1)));
}

! + 2 = #
} + 3 = !
b - 1 = a

答案 3 :(得分:0)

试试这个。

public static void main(String[] args) {

    String ascii;
    String rotate;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter ASCII Character");
    ascii = in.nextLine();
    System.out.println("Enter Rotate value");
    rotate = in.nextLine();


    int output=(Integer.parseInt(ascii)+Integer.parseInt(rotate))% 126;

    if(output<32) output=output+32;

    System.out.println("output="+output);
    System.out.println(Character.toString ((char) output));

}