java - 仅使用循环替换字符串中字符的所有实例

标签 java string loops

正如标题所示,我有一个家庭作业问题,但我无法解决。仅使用基本字符串方法(length、charAt、substring、equals、equalsIgnoreCase)和循环,我必须替换用户输入字符串中字符的所有实例,并使用用户想要代替的新字符打印新字符串老的。我不确定如何在不使用 indexOf 的情况下查找和存储字符串字符的所有实例。这是我编写的一些基本代码,任何指导将不胜感激。我不知道如何仅使用这些基本字符串方法来替换字符的所有实例。

        String letter;

        System.out.println("Enter the character you want to replace");
        input = keyboard.nextLine();

        int characterAt = 0;
        for (characterAt = 0; characterAt < savedInput.length(); characterAt++)
        {
            letter = "" + savedInput.charAt(characterAt);
                if(input.equals(letter))
            {
                System.out.println("Enter the new character");
                input = keyboard.nextLine();
                System.out.println("The new string is: " );

            }
        }

最佳答案

有几种方法可以做到这一点。您可以将字符串转换为字符数组 - String#toCharArray 。然后您需要迭代数组并将 char 替换为新值。

char[] chars = "lorem ipsum sit amet".toCharArray();
char newValue = 'X';
for (int i = 0; i < chars.length; i++) {
      if (chars[i] == 'm') {
          chars[i] = newValue;
      }
}
System.out.println(new String (chars)); // loreX ipsuX sit aXet

您可能想使用StringBuilder来实现类似的解决方案:

StringBuilder builder = new StringBuilder("lorem ipsum sit amet");
char newValue = 'X';
for (int i = 0; i < builder.length(); i++) {
    if (builder.charAt(i) == 'm') {
        builder.setCharAt(i, newValue);
    }
}
System.out.println(builder); // loreX ipsuX sit aXet

您甚至可以使用 stream API 来实现此目的:

String newString = "lorem ipsum sit amet".chars().map(el -> {
    if ((char) el == 'm') {
        return 'X';
    } else {
        return el;
    }
}).collect(StringBuilder::new,
        StringBuilder::appendCodePoint, StringBuilder::append)
        .toString();
System.out.println(newString); // loreX ipsuX sit aXet

关于java - 仅使用循环替换字符串中字符的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536551/

相关文章:

java.lang.ClassFormatError

c# - 获取参数的全名(命名空间、类、方法和名称)c#

java - 分割输入

java - 如何在mongoquery中展开两个数组

java - opencv人脸识别,获取图像周围坐标 "bounding box"

java - JFrame repaint() 和 revalidate() 仅在 Mac 操作系统上调整窗口大小时更新

javascript - 美元符号后跟模板字符串中的方括号

Python:在循环中对变量执行用户定义的加法

xml - 绕过循环函数中的错误(用于从 Twitter 中提取数据)

python - 在 Python 中遍历日期