当前位置: 首页 > 知识库问答 >
问题:

在java中如何用循环替换字母?

洪星文
2023-03-14

我正在编写一个密码学程序,将密文转换为明文。根据字母的频率,我手动将密码的所有字母破解为明文,并且没有模式,所以我需要编写一个包含26次的循环,将字符串中的每个字母转换为另一个字母。

我的第一次尝试是在java中使用replace语句,如下所示

str=str.replaceAll("A","E");

问题是,例如,我输入这样的字符串abc,我的键将是这样的“用c替换a,用p替换b,用q替换c”。我想要的输出应该是cpq,但我得到的输出是qpq。这意味着我希望它是一次性的。

所以我尝试使用循环,使用if

我的做法是:

for (i=1;i<string.length;i++)
    if (char[i]=="a")
        char [i] ="b";

这个错误告诉我,我不能将字符串转换为char。另外,我想问一下,我是把其他25个if语句放在这个语句中还是并行它们?

共有3个答案

米项禹
2023-03-14

不能将字符串转换为字符。所以你要么使用所有字符串,要么使用所有字符。不必对字符串使用双引号,可以对char使用单引号,如下所示:

char[i]=='b'

char[i] = 'b';

此外,您可以使用switch语句,也可以创建并使用映射将转换存储在键/值对中,而不是使用长if/else语句。

滕翔飞
2023-03-14

你可以解决这个问题:

    String str = "abc";
    char [] ch = str.toCharArray();

    for(int i=0; i<str.length(); i++){
        if('a'==str.charAt(i)){
            ch[i] = 'c';
        }
        if('b'==str.charAt(i)){
            ch[i] = 'p';
        }
        if('c'==str.charAt(i)){
            ch[i] = 'q';
        }
    }
    System.out.println(String.valueOf(ch));
苏振国
2023-03-14

回答问题的第二部分:我不会在循环中添加25条if语句,而是使用映射

完整的解决方案可能如下所示:

public static void main(String[] args) {
    Map<Character, Character> replacements = new HashMap<>();
    replacements.put('a', 'c');
    replacements.put('b', 'p');
    replacements.put('c', 'q');

    String input = "abcd";
    StringBuilder output = new StringBuilder();
    for (Character c : input.toCharArray()) {
        output.append(replacements.getOrDefault(c, c));
    }
    System.out.println(output.toString());
}

这将保留您无法替换的字符。输出:

cpqd

 类似资料:
  • 在我的任务中,当用户试图输入一些值时,我需要放置InputMismatchException。用户获取从1到某个数字的一些数字(simptoms.lenght)。 在这段代码之后,我尝试了这样做:我尝试了try(!scanner.hasnextInt()),而不是while(!scanner.hasnextInt),我得到了以下消息:

  • 问题内容: 我有下面的简单代码,我试图将其转换为功能样式 是否可以轻松地用流替换此循环?我看到的唯一选择是使用两个不同的过滤条件在流上迭代两次。 问题答案: 听起来您可以只使用以下条件: 简短但完整的示例,将短字符串映射为小写,将长字符串映射为大写:

  • 问题内容: 我试图将字符串分成数组并替换为,但无法做到,我也尝试了String.replaceAll这样的东西。 我想提供一个通往JNI的路径,并且它只能以这种方式读取。 问题答案: 在这种情况下不要使用- 这是用正则表达式指定的,这意味着您需要更多的转义。这应该很好: 请注意,由于Java字符串文字中的原因,反斜杠加倍-因此此处涉及的 实际 字符串是“单反斜杠”和“双反斜杠”-而不是双倍和四倍。

  • 问题内容: 我正在尝试使用flatmap与Stream API进行嵌套循环,但似乎无法弄清楚。作为示例,我想重新创建以下循环: 我可以这样做,但这看起来很丑: Flatmap看起来很有希望,但是如何在外循环中访问变量? 输出: 问题答案: 您必须在阶段中创建所需的元素,例如:

  • 问题内容: 如何在Java中用空字符串替换单引号’。我尝试了以下操作,但似乎没有用。 提前致谢。非常感谢您的帮助。(输出应为:Sids den) 谢谢你们的回应。我想我应该对我的问题更加清楚。基本上,我从表中获得特殊字符,并且从同一个表中我们必须用什么值替换那些特殊字符。这是代码片段: 因此,当数据中的evrf有特殊字符’时,我将面临nullpointer异常。请建议如何进行此操作? 问题答案:

  • 问题内容: 例如 :- 彼此替换字符。 输出 我该怎么做而没有任何循环? 问题答案: 一种方法是使用流。和地图: 那打印