public class Main {
public static void main(String[] args) {
Scanner u = new Scanner(System.in);
final String k = u.next();
u.nextLine();
String message = u.nextLine();
String[] f = message.split(" ");
System.out.println(encipher(message,k));
for (String s : f) {
if (s.charAt(0) == 'a' || s.charAt(0) == 'e' || s.charAt(0) == 'i' ||
s.charAt(0) == 'o' || s.charAt(0) == 'u') {
System.out.println(s);
} else {
System.out.println(encipher(s, k));
}
}
}
public static String encipher(String message, final String key)
{
String output = "";
for (int x = 0, y = 0; x < message.length(); x++)
{
char c = message.charAt(x);
if (c < 'a' || c > 'z')
continue;
output += (char) ((c + key.charAt(y) - 2 * 'a') % 26 + 'a');
y = ++y % key.length();
}
return output;
}}
当逐字应用加密时,将为每个字重置密钥,并且“de”
用“ob”
加密:
brasileira
obiobiobio
de
ob
当对整个邮件进行加密时,密钥不会重置(“Olimpiada”
有9个字母,可以被“obi”整除。length()==3
)并且“de”
用“bi”
加密:
olimpiada brasileira de informatica
obiobiobi obiobiobio bi obiobiobiob
因此,如果可能需要记住y
索引,或者应该实现另一个方法,在下一个索引的非空键中提供一个字符:
private static Map<String, Integer> keyIndexes = new HashMap<>();
private static char getNextPosition(String key) {
return key.charAt(keyIndexes.compute(
key, (k, v) -> v == null ? 0 : (v + 1) % k.length()
));
}
private static void resetKey(String key) {
keyIndexes.remove(key);
}
public static String encipher(String message, final String key)
{
StringBuilder output = new StringBuilder();
for (char c : message.toCharArray())
{
if (c < 'a' || c > 'z')
continue; // skip non-letters
output.append((char) ((c + getNextPosition(key) - 2 * 'a') % 26 + 'a'));
}
return output.toString();
}
String message = "olimpiada brasileira de informatica";
String k = "obi";
System.out.println(encipher(message, k));
// !!!
resetKey(k);
for (String s : message.split(" ")) {
if (s.matches("[aeiou]\\w*")) { // use regexp to detect a word starting with a vowel
System.out.println(s);
} else {
System.out.println(encipher(s, k));
}
}
cmqaqqoeipsigjtsjzoemwoncsuouqqb // full message, spaces skipped
olimpiada
psigjtsjzo
em
informatica
public static String encipherWork(String message, final String key) {
StringBuilder output = new StringBuilder();
boolean inWord = false;
boolean firstVowel = false;
for (char c : message.toCharArray()) {
if ('a' <= c && c <= 'z') {
if (!inWord) {
firstVowel = (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');
inWord = true;
}
if (!firstVowel) {
output.append((char) ((c + getNextPosition(key) - 2 * 'a') % 26 + 'a'));
continue;
}
} else {
inWord = false;
firstVowel = false;
}
output.append(c); // print non-enciphered characters
}
return output.toString();
}
olimpiada psigjtsjzo em informatica // full message
olimpiada
psigjtsjzo
em
informatica
我有一个文本文件,我已经加密使用移位,但我需要加密加密的文本再次,但这一次使用vigenere密码。然后我需要解密加密的文本(首先是vigenere,然后是Shift),但所有的大小写字母以及黑色空格、引号、逗号和句号都需要保持不变。我已经完成了移位、加密和解密,剩下的就是Vigenere了。下面显示的是我加密Vigenere的类,我还没有写解密,因为我被卡在加密步骤。谢谢你。
我被分配了一个任务,从数组列表中返回以特定字母开头的单词,但是我选择了字母c;我被告知我可以用另一种方式做到这一点,除了专门返回每个以字母开头的元素和许多println之外,我不知道除了使用ArrayList startswith方法之外,还有什么其他方法可以做到这一点,有人愿意启发我吗? }
我只需要反转字符串中的字母,并使用将符号和数字保持在相同的位置,并且我还需要保持反转单词的相同顺序。我的代码反转字符串并将符号和数字保持在适当的位置,但更改单词的顺序,例如: 我的输入字符串: a1bcd efg!H 我的输出字符串: h1gfe dcb!A. 相反,我的输出应该是: d1cba hgf! e
问题内容: 这是Hadoop字数统计Java映射并减少源代码: 在map函数中,我已经到了可以输出所有以字母“ c”开头的单词以及该单词出现的总次数的位置,但是我想做的就是输出总数以字母“ c”开头的单词,但我在获取总数上有些停留。任何帮助将不胜感激,谢谢。 例 我得到的输出: 可以2 罐3 猫5 我想要得到的是: 合计10 问题答案: 克里斯·格肯 的答案是正确的。 如果您要输出单词作为关键字,
我有一根绳子,例如“狗是好宠物” 我只想返回以辅音开头的单词。[“狗”、“好”、“宠物”]作为列表
本文向大家介绍Python中的正则表达式,用于在以大写字母开头的单词之间放置空格,包括了Python中的正则表达式,用于在以大写字母开头的单词之间放置空格的使用技巧和注意事项,需要的朋友参考一下 我们在这里试图解决的问题是将CamelCase转换为单独的单词。我们可以使用正则表达式直接解决此问题,方法是查找给定字符串中所有出现的大写字母,并在其前面放置一个空格。我们可以使用re模块中的sub方法。