假设我想取一个字符串并将每个字符(包括空格)增加+ n,然后打印出新字符串。例如:
string 1 ='look out'
n = 7
所以字符串2会='svvrgvba'
这有意义吗?无论如何,我不知道如何在这里开始。在将值增加n
之前,是否需要将原始字符串拆分为其组成字符?或者我可以使用像string.charAt(0) + n
这样的东西吗?
答案 0 :(得分:1)
String s1="look out";
int n=7;
char[] c= s1.toCharArray();
String f="";
for(int i=0 ; i<s1.length() ; i++) {
if(c[i]==' ' || c[i]=='z'){
c[i]= 'a';
for(int j=1 ; j<n; j++){
c[i]++;
}
}
else{
for(int j=0 ; j<n; j++){
c[i]++;
if(c[i]=='z'){
c[i]= 'a';
c[i]--;
}
}
}
f += c[i];
}
SOP(f);
答案 1 :(得分:0)
查看Ascii table:
l → 108 Adding 7 will result in 115 decimal value, which is the char s
o → 111 Adding 7 will result in 117 decimal value, which is the char v
o → 111 ..
k → 107 ..
→ 32 ..
o → 111 ..
u → 117 Adding 7 will result in 124, but you exceed 122 (z) by 2, so you convert it to b
t → 116 ..
如果您为每个字符添加svvrgvba
,您将获得7
。但是你应该处理将7
添加到t
时的情况(你实际上在z
后得到一个小数值,在这种情况下你应该将它切换到a
)
答案 2 :(得分:0)
您正在寻找“ROT7”,here是ROT13的维基百科文章
答案 3 :(得分:0)
凯撒编码使用它。
你确实可以单独看每个角色并循环遍历它们,就像Maroun告诉你的那样为每个角色添加值:)
答案 4 :(得分:0)
试试这个!!!
int n = 7;
n = n%26; //This will solve your problem if n is a large number like 1000
String str = "look out";
char[] arr = str.toCharArray();
int ascii = 0;
int newAscii = 0;
String newStr ="";
char c;
for(int i=0; i<arr.length; i++) {
ascii = arr[i];
if(ascii == 32)
newAscii = 97+n-1;
else if((ascii+n)>122)
newAscii = 97+(n-1-(122-ascii));
else
newAscii = ascii+7;
c = (char)newAscii;
newStr += c;
}
System.out.println(newStr);
如果您考虑在两者之间使用大写字母,那么也可以使用此else if
条件。
else if(ascii<=90)
{
if((ascii+n)>90)
newAscii = 65+(n-1-(90-ascii));
else
newAscii = ascii+n;
}