java - 如何实现凯撒密码?

标签 java

我正在编写代码来破译消息。为此,您输入一个字符串,它以以下方式输出:b 变为 a,c 变为 b 等等。同样对于数字,2 变为 1,3 变为 2。

最佳答案

方法String.replace(char,char)用新字符替换所有出现的给定字符。

例如,假设您有一个类似“talk to the裁缝”的字符串,并且您对其运行 replace('t','w') ,您会得到“walk wo whe”水手”。

但这意味着一旦您到达已替换的字母,您将再次替换它们 - 返回另一个字母。

您不应该为此使用replace。最好的办法可能是使用 StringBuilder 并在破译后将每个字母附加到它。

<小时/>

另请注意,仅仅为了找到该字母而遍历整个字母表是非常浪费的。首先,String类中已经有这样一个方法,名为indexOf。其次,对于英文字母和数字,字符unicode值是连续的。这意味着您只需从 b 减去一即可得到 a:

char ch = 'b';
ch = (char)(ch - 1);

这将为您提供 ch 中的 a。所以你需要做的就是确保该字符在给定的范围内,然后从中减去 1。

关于java - 如何实现凯撒密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701683/

相关文章:

java - 为什么我的类的序列化大小大于其变量的总和

java - 在 Spinner 控件中仅插入数字

java - 从另一个类的事件运行新的 GUI 窗口

java - 为什么 java 中的 "switch"检查的情况比需要的多?

java - 在 Gradle 中构建依赖关系树

Java 维卡 : How to specify split percentage?

java - 可绘制 == 可绘制?

java - 如何使用 Apache POI 为 .xlsx 文件中的所有单元格将空白返回为 null?

java - Camel Spring DSL 未按预期工作

java - Hibernate - 没有名为 * 的 EntityManager 的存在提供者