Java 如何输入一个字符,然后在英文字母表中将其上移几个字母
如何输入一个字符,然后在英文字母表中将其上移几个字母。我知道如何从字符串中提取字母。但是我需要在英文字母表中将这个字母上移2个字符 因此: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
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')
会将字母向后移动。