如何获取字母数字并对其进行操作

时间:2013-02-13 21:32:38

标签: java arrays string algorithm

我有一个要求,我需要在给出字母和数字时返回字母表。 例如,如果给定,C和4我将返回C + 4 = G. 如果给定C和-2,我将返回C +( - 2)= A

如果我有AA,那么AA + 4 = AD,所以我总是想从字符串中取出最后一个字符。

我在考虑使用字符串数组来存储字母表,但这似乎是一种糟糕的解决方案。有什么方法可以让我更好地完成它吗?

6 个答案:

答案 0 :(得分:2)

字母字符已全部按顺序排列,您需要做的只是为一个添加一个数字以获得另一个。

我认为你想要这样的东西:

addToChar('A', 4);

char addToChar(char inChar, int inNum)
{
  return (char)(inChar + inNum);
}

你可能想检查它是否小于'A'或大于'Z'。

回复您的修改:

void addToChar(char[] inChars, int inNum)
{
   for (int i = inChars.length-1; inNum != 0 && i >= 0; i--)
   {
      int result = inChars[i]-'A'+inNum;
      if (result >= 0)
      {
         inNum = result / 26;
         result %= 26;
      }
      else
      {
         inNum = 0;
         while (result < 0) // there may be some room for optimization here
         {
            result += 26;
            inNum--;
         }
      }
      inChars[i] = (char)('A'+result);
   }
}

处理溢出:(效率稍差)('Z' + 1输出'AA'

static String addToChar(String inChars, int inNum)
{
   String output = "";
   for (int i = inChars.length()-1; inNum != 0 || i >= 0; i--)
   {
      if (i < 0 && inNum < 0)
         return "Invalid input";
      int result = i >= 0 ? inChars.charAt(i)-'A'+inNum
                          : -1+inNum;
      if (result > 0)
      {
         inNum = result / 26;
         result %= 26;
      }
      else
      {
         inNum = 0;
         while (result < 0)
         {
            result += 26;
            inNum--;
         }
      }
      output = (char)('A'+result) + output;
   }
   return output;
}

答案 1 :(得分:1)

试试这个例子:

public class example {

 public static void main(String[] args) {

     int number = 2;
     char example = 'c';

     System.out.println((char)(example+number));

    }
 }

答案 2 :(得分:1)

这是更新问题的示例:

仍然需要验证输入数字和输入字符串(假设如果数字是124,会发生什么?)

 public class example {

 public static void main(String[] args) {

     int number = 1;
     String example = "nicd";
     //get the last letter from the string
     char lastChar = example.charAt(example.length()-1);
     //add the number to the last char and save it
     lastChar = (char) (lastChar+number);
     //remove the last letter from the string
     example = example.substring(0, example.length()-1);
     //add the new letter to the end of the string
     example = example.concat(String.valueOf(lastChar));
     //will print nice
     System.out.println(example);

    }
 }

答案 3 :(得分:0)

您不需要在数组中存储字母;这就是为什么ASCII具有连续顺序的所有字母的原因之一。

执行数学运算,隐式将char转换为int,然后将结果转换为char。你必须检查你是不是在'A'之前或'Z'之后。

这是一个ASCII table reference

答案 4 :(得分:0)

你有没有谷歌关于字符集?与ASCII一样,字符已由数字表示。

答案 5 :(得分:0)

首先,将您的角色转换为带有演员的int,然后添加int,并将其转换回char。例如:

char c = 'c';
int cInt = (int)c;
int gInt = cInt + 4;
char g = (char)gInt; // 'G'