【问题标题】:How to store Character in a String?如何将字符存储在字符串中?
【发布时间】:2016-05-02 20:40:42
【问题描述】:

我正在做一个单词加密方法,所以它应该以 String plainWord 和 String key 作为参数。

现在,当我尝试获取加密字符并将它们存储在字符串单词中并返回由这些加密字符组成的单词时,但我找不到这样做的方法。

这是我用过的方法:

public static String encryptWord (String plainWord, String key) {
    int pword;
    int k;
    char cipherCH;
    String cipherWord = null;

    for (int i = 0; i < plainWord.length(); i++) {

        pword = Secret_Code_Library.getDigit(plainWord.charAt(i));
        k = Secret_Code_Library.getDigit(key.charAt(i));

        cipherCH = Secret_Code_Library.getLetter((pword+k)%25);
        for (int j = 0; j < plainWord.length(); j++) {
            cipherWord.charAt(j) = Character.toString(cipherCH);
        }
    }
return cipherWord;
}

现在错误出现在“cipherWord.charAt(j) = Character.toString(cipherCH);”这一行中那么密码字符(cipherCH)应该如何存储在密码字(cipherWord)中呢?

这里是 getLetter 和 getDigit 方法:

    public class Secret_Code_Library {
     //LETTERS is a reference Class variable contains the alphabetic characters from A to Z in Upper-case    
    public static final char [] LETTERS={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };

       /* getLetter is a class method that has one argument which is an integer number.
        * It returns the corresponding ccharacter to the given integer argument.
        */
    public static char getLetter(int digit){
       return  LETTERS[digit];   }


        /* getDigit is a class method that has one argument which is a character.
         * It returns the corresponding number to the given character argument.
         */   
    public static int getDigit(char ch){
        int digit=0;
        switch (ch){
            case 'A': digit=0; break;   case 'B': digit=1; break; case 'C': digit=2; break; 
            case 'D': digit=3; break;   case 'E': digit=4; break; case 'F': digit=5; break;    
            case 'G': digit=6; break;   case 'H': digit=7; break; case 'I':  digit=8; break;           
            case 'J':  digit=9; break;   case 'K': digit=10; break; case 'L': digit=11; break;    
            case 'M': digit=12; break; case 'N': digit=13; break;  case 'O': digit=14; break;    
            case 'P': digit=15; break; case 'Q': digit=16; break;   case 'R': digit=17; break;    
            case 'S': digit=18; break; case 'T': digit=19; break;   case 'U': digit=20; break;
            case 'V': digit=21; break; case 'W': digit=22; break;  case 'X': digit=23; break;    
            case 'Y': digit=24; break; case 'Z': digit=25; break;      
     }// switch
        return digit;
    } 
}

【问题讨论】:

  • 两种解决方案:创建一个 char 数组,设置它的每个元素,然后从这个 char 数组创建一个字符串(这看起来最像你想要做的),或者使用StringBuilder,附加每个字符,然后将其转换为字符串。 null 不是字符串。没什么。即使是这样,字符串也是不可变的:您不能修改字符串。即使是这样,使用返回字符的方法来设置字符也是行不通的。您需要一个方法,例如 setCharacterAt(int index, char c)
  • ..或对 char 进行一些计算(可能是 ch - 'A')
  • @JBNizet 谢谢,我已经完成了 Char 数组并将其存储在一个数组中,您可以将其发布为答案。这是最简单也是最好的方法

标签: java string netbeans character


【解决方案1】:

两种解决方案:

  1. 创建一个 char 数组,设置它的每个元素,然后从这个 char 数组创建一个字符串(这看起来最像您正在尝试做的事情);

  2. 使用 StringBuilder,附加每个字符,然后将其转换为字符串。

null 不是字符串。没什么。即使是这样,字符串也是不可变的:您不能修改字符串。即使可以,使用返回字符的方法来设置字符也是行不通的。你需要一个方法,比如setCharacterAt(int index, char c)

请注意,最“惯用”或“传统”的方式是第二种方式。很难提前知道一个 String 将包含多少个字符,因此拥有一个根据需要增长的 STingBuilder 非常方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多