Преобразование строки в соответствующие юникодные и обратно только с использованием строк и целых

Что ж, мое задание - преобразовать строку в соответствующие юникодные целые числа, сдвигая в зависимости от желаемого шифрования (слева или справа и от количества пробелов). Я смог понять эту часть просто отлично. Но затем мне нужно ввести сдвинутую строку юникода и преобразовать ее обратно в исходную введенную строку. Вот мой код Я не могу понять, как преобразовать строку Unicode обратно в исходную строку. ** Примечание - мне разрешено использовать только INTS и STRING.

import java.util.Scanner;
import java.lang.String;
import java.lang.Character;

public class CSCD210_HW2
{
   public static void main(String [] args){
   Scanner input = new Scanner(System.in);
   String str, str1 = "";  
   String encrypt, decrypt = ""; 
   int i = 0; 
   int i1 = (int)0;

      System.out.printf("Please enter a string:"); 
      str = input.nextLine();
      System.out.printf("\nPlease enter encryption format - \'left\' or \'right\'" +
      " \"space\" number of spaces:");
      encrypt = input.nextLine();
      int length = str.length();
      String spaces = encrypt.substring(encrypt.lastIndexOf(' ') + 1); 
      Integer x = Integer.valueOf(spaces);   
      //encrypt
      if (encrypt.startsWith("l")){
         while (i < length){
         int uni = (int)(str.charAt(i++));
         char uni1 = (char)uni;
         int result = uni + x;
         System.out.print(result + " ");}}
      else if (encrypt.startsWith("r")){
         while (i < length){
         int uni = (int)(str.charAt(i++));
         char uni1 = (char)uni;
         int result = uni - x;
         System.out.print(result + " ");}}
      //decrypt
      System.out.printf("\nPlease enter encrypted string:");
      str1 = input.nextLine();
      System.out.printf("\n\'left\' or \'right\' \"space\" number of spaces:");
      decrypt = input.nextLine();
      int length1 = str1.length();
      String spaces1 = decrypt.substring(decrypt.lastIndexOf(' ') + 1);
      Integer y = Integer.valueOf(spaces1);
      if (decrypt.startsWith("l")){
         while (i < length1){
         char word = (char)(str1.charAt(i++));
         int result = word + y;
         System.out.print(result);}}
      else if (decrypt.startsWith("r")){
         while (i < length1){
         char word = (char)(str1.charAt(i++));
         int result = word - y;
         System.out.print(result);}}


   }
}

1 ответ

Ваша вторая часть не имеет смысла, поскольку у вас есть зашифрованные значения, которые в основном представляют собой 3 цифры для одного символа. Поэтому вам нужен способ конвертировать 3 числа обратно в 1 символ, а не создавать символ для каждого числа.

Замените это своей второй частью:

  // split the input line containing the encrypted values into single tokens
  // each token represents the numerical values of a single character
  String[] tokens = str1.split("\\s");
  // reserve some space for the characters
  // char[] chars = new char[tokens.length];
  String chars = "";
  // keep track of the position
  // int pos = 0;
  for (String token : tokens)
  {
      if (decrypt.startsWith("l"))
      {
          // convert the string containing the number to integer
          Integer val = Integer.parseInt(token);
          // convert the integer back to char and apply the transformation
          // chars[pos++] = ((char)(val.intValue()+y));
          chars += ((char)(val.intValue()+y));
      }
      else
      {
          // convert the string containing the number to integer
          Integer val = Integer.parseInt(token);
          // convert the integer back to char and apply the transformation
          // chars[pos++] = ((char)(val.intValue()-y));
          chars += ((char)(val.intValue()-y));
      }
  }
  // check if everything worked as expected
  System.out.println(chars);
  // System.out.println(new String(chars));

@ Редактировать: ОБНОВЛЕНО к потребностям ОП

Другие вопросы по тегам