Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何输入一个字符,然后在英文字母表中将其上移几个字母_Java_String_Algorithm - Fatal编程技术网

Java 如何输入一个字符,然后在英文字母表中将其上移几个字母

Java 如何输入一个字符,然后在英文字母表中将其上移几个字母,java,string,algorithm,Java,String,Algorithm,如何输入一个字符,然后在英文字母表中将其上移几个字母。我知道如何从字符串中提取字母。但是我需要在英文字母表中将这个字母上移2个字符 因此: A将C C将E 我该怎么做呢?我相信字符和整数是可以互换的,你试过了吗:chard=c+2其中c是字符 char c = 'A'; c += 2; System.out.println(c); 打印C您可以尝试caesar方法,其中s=yourword和k=movedbynumberinalpabet: public class CaesarChiffre

如何输入一个字符,然后在英文字母表中将其上移几个字母。我知道如何从字符串中提取字母。但是我需要在英文字母表中将这个字母上移2个字符

因此:

A
C

C
E


我该怎么做呢?

我相信字符和整数是可以互换的,你试过了吗:
chard=c+2
其中c是字符

char c = 'A';
c += 2;
System.out.println(c);

打印
C
您可以尝试caesar方法,其中
s=yourword
k=movedbynumberinalpabet

public class CaesarChiffre {

    private String[] alphabet = { "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",
            "0","1","2","3","4","5","6","7","8","9"};

    public CaesarChiffre() {
        System.out.println(caesarChiffre("hello", 2));
    }

    public String caesarChiffre(String s, int k) {
        if (k<0) {
            k = this.alphabet.length + k;
        }
        String[] c = new String[s.length()];
        String t = "";
        int [] n = new int[s.length()];

        for(int i = 0 ; i < s.length() ; i++) {
            c[i] = s.substring(i,i+1);
            for(int j = 0 ; j < this.alphabet.length ; j++) {
                if(c[i].equalsIgnoreCase(this.alphabet[j])) {
                    n[i] = (j+k) % this.alphabet.length;
                }   
            }
        }
        for(int i = 0 ; i < s.length() ; i++) {
            c[i] = this.alphabet[n[i]];
            t = t + c[i];
        }
        return t.trim();
    }
公共类CaesarChiffre{
私有字符串[]字母={“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”,
"0","1","2","3","4","5","6","7","8","9"};
公共事业部{
System.out.println(caesarChiffre(“hello”,2));
}
公共字符串caesarChiffre(字符串s,int k){
如果(k如果你想建立一个:

代码

public static void main(String[] args) {
  String str = "ABCXYZ";
  System.out.println(encrypt(str, 2));
}

public static String encrypt(String str, int n) {
  StringBuilder sb = new StringBuilder();
  for (char c : str.toCharArray()) {
    sb.append((char) ((c + n - 'A') % 26 + 'A'));
  }
  return sb.toString();
}
CDEZAB
输出

public static void main(String[] args) {
  String str = "ABCXYZ";
  System.out.println(encrypt(str, 2));
}

public static String encrypt(String str, int n) {
  StringBuilder sb = new StringBuilder();
  for (char c : str.toCharArray()) {
    sb.append((char) ((c + n - 'A') % 26 + 'A'));
  }
  return sb.toString();
}
CDEZAB

您可以使用模方法尝试此简单方法(仅对a-Za-z范围有效):

输出:

a + 2 = c
A + 2 = C
J + 7 = Q
y + 2 = a
z + 3 = c
Y + 4 = C
Z + 1 = A

+1代表@Marounnaroun!@bobbel+1代表我+2上的+1。这个技巧是如何包装y->a和z->b@MarounMarounUPVOTECEPTION小心边界。
'z'+2
将超过ASCII表中的字母字符。请尝试
c+=c>'X'?-24:2;
是的,这将起作用并保持相对简单;您也可以使用
mod
(%)
但这会让它更不可读。不幸的是,你需要一个类型转换:
c=(char)('a'+(c-'a'+2)%26);
你能解释一下这部分吗
(c+n-'a')%26+'a')
请?我对此有点困惑,为什么
(c-n+'a')%26+'a')
会将字母向后移动。