【发布时间】:2021-04-10 16:05:40
【问题描述】:
我正在尝试创建一个将文本文件解密为可读文本的程序。编码文本遵循两个规则,它总是以元音或辅音开头,表示为 C 或 V,后跟其索引位置(例如:V1C1C3,将是“abc”)
我创建了两个数组来包含元音和辅音(“0”位于索引 0 处,因此数组的其余部分可以从索引 1 开始):
String[] vowels = {"0", "a", "A", "e", "E", "i", "I", "o", "O", "u", "U", "y", "Y"};
String[] cons = {"0","b", "B", "c", "C", "d", "D", "f", "F", "g", "G", "h", "H", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "v", "V", "w", "W", "x", "X", "z", "Z"};
我正在使用扫描仪将代码分成元音和辅音,并获得索引值:
while(scan.hasNext()){
String[] parts = scan.nextLine().split("(?=[CV])");
for (String part : parts) {
Scanner num = new Scanner(part).useDelimiter("[^0-9]+");
int value = num.nextInt();
if(part.charAt(0) == 'C'){
System.out.print(cons[value]);
}
else if (part.charAt(0) == 'V'){
System.out.print(vowels[value]);
}
}
}
密文:V6 C17V7C33V3 V1C23C23C17V3C29(结果应该是:我爱苹果)
我得到的结果:Iloveapples
P.S:如果我有多个加密文本段落,扫描仪会在第一段之后停止并输出错误。如果我使用“scan.next()”而不是“scan.nextLine()”,则不会发生这种情况
【问题讨论】:
-
代码中没有检测和输出缺失空格的内容。
-
@AdrianHHH 那么您是否建议我制作一个新的扫描仪来检查空格或在现有的扫描仪中添加“\\s”?
-
您需要在您的零件循环周围再一个循环。对空间执行拆分,然后将该输出输入到部件循环中。在新循环的末尾打印一个空格。或者,您可以使用流或正则表达式重新映射您的字符并保留空格。
标签: java regex java.util.scanner