Java 在数组中的特定点添加字符

Java 在数组中的特定点添加字符,java,Java,我正在研究一个凯撒密码,我已经按照计划完成了大部分代码。 代码应该是 删除所有特殊字符和空格 把所有东西都大写 以输入的间隔添加空格任何带有x的剩余空格 例如,如果我要打字 明文:嗨,我是道格 关键词:1 缓冲区:3 我的输出应该是 IJJ-NEP-VHX 现在我已经把所有的东西都准备好了,除了缓冲部分 这是我的全部代码 import java.util.Scanner; import java.lang.String; public class Main { public sta

我正在研究一个凯撒密码,我已经按照计划完成了大部分代码。 代码应该是

  • 删除所有特殊字符和空格
  • 把所有东西都大写
  • 以输入的间隔添加空格任何带有x的剩余空格
  • 例如,如果我要打字
    
    明文:嗨,我是道格
    关键词:1
    缓冲区:3

    我的输出应该是

    IJJ-NEP-VHX

    现在我已经把所有的东西都准备好了,除了缓冲部分

    这是我的全部代码

    
    import java.util.Scanner;
    import java.lang.String;
    public class Main {
    
        public static void main(String[] args) {
            System.out.print("Enter plaintext: ");
            Scanner pTextInp = new Scanner(System.in);
            String pText = pTextInp.nextLine();
            System.out.print("Enter key value: ");
            Scanner kInp = new Scanner(System.in);
            int key = kInp.nextInt();
            pText = normalizeText(pText);
            pText = caesarify(pText, key);
            System.out.print("Enter desired grouping number: ");
            Scanner grpInp = new Scanner(System.in);
            int grpInt = grpInp.nextInt();
            pText = groupify(grpInt, pText);
            System.out.println(pText);
        }
        // CONVERT STRING TO A CHAR ARRAY
        public static char[] sArray(String s) {
            int sLen = s.length();
            char[] sChar = new char[sLen + 1];
            for (int i = 0; i < sLen; i++){
                sChar[i] = s.charAt(i);
            }
            return sChar;
        }
    
        public static String caesarify(String s, int k) {
            int sLen = s.length();
            char cText[] = sArray(s);
            for (int i = 0; i < sLen; i++){
                int j =  cText[i] - 65;
                int l = (((j + k) % 26) + 65);
                cText[i] = (char) l;
            }
            s = new String(cText);
            return s;
        }
    
        // normalizes text (removes all spaces and special characters)
        public static String normalizeText(String s) {
                int sLen = s.length();
                char[] t1 =  s.toCharArray();
                for (int i = 0; i < sLen; i++ ){
                    if(t1[i] < 'A' || t1[i] > 'z' || (t1[i] > 'Z' && t1[i] < 'a')) {
                        t1[i] = ' ';
                    }
                    else{
                        t1[i] = s.charAt(i);
                    }
                }
                String t = new String(t1);
                t  = t.replaceAll(" ", "" );
                t = t.toUpperCase();
                return t;
        }
    
         public static String groupify(int i , String s){
            int sLen = s.length();
            char[] t = new char[sLen];
            for (int j = 0; j < s.length(); j++){
                t[j] = s.charAt(j);
                if ( j % i == 0) {
                t[j] = ' ';
                sLen++;
            }
            }
            s = new String(t);
            return s;
        }
    
    我明白了

     JJ EP H 
    
    作为输出


    非常感谢当前您的代码
    t[i]+='
    正在将空格字符的值添加到数组中的值。那不是你想要的。相反,您希望在下一个位置存储空间。我还建议您为变量使用更好的名称-单字符变量通常只应用于索引

    int pos = 0;
    for (int j = 0; j < input.length(); j++)
        result[pos++] = input.charAt(j);
         if ( j % group == 0) {
            result[pos++] = ' ';
        }
    }
    
    int pos=0;
    对于(int j=0;j
    对于突出显示的代码,For循环后缺少花括号。尝试在for循环外定义j,并在for循环中将值0指定给j。如果您将新字符数组的大小存储在一个单独的变量中,这将是一个更好的做法,因为在代码中查找错误时更容易读取。

    请修复损坏的键盘。这个网站更像是维基百科,而不是聊天室。“现在我把所有东西都用上了,但缓冲区部分”有点含糊不清,不是吗?当你发布一个问题时,你需要提供一个清晰的问题陈述。缓冲区到底出了什么问题?当我尝试实现您的代码时,它给了我一个错误,字符串超出了界限。pos++应该增加数组的大小,但现在应该吗?
     JJ EP H 
    
    int pos = 0;
    for (int j = 0; j < input.length(); j++)
        result[pos++] = input.charAt(j);
         if ( j % group == 0) {
            result[pos++] = ' ';
        }
    }