java - 在每个元音前添加文本

标签 java arrays string replace char

您好,我正在尝试在文本中的每个元音 (A,E,I,O,U) 之前添加字符串 OB。我可以假设文本全部由大写字母组成,没有空格或标点符号。这些由我能够创建的其他方法处理。

这是我目前所拥有的:

public static String obify(String s){

    String text = s;
    String[] capVowels = {"A", "E", "I", "O", "U"};
    for (String vow : capVowels){
        text = text.replace(vow, "OB" + vow);
    }
    return text;
}

但是当我传递给它一个 sting 时,它会在第一个元音之前打印两个 OB。 示例输入:HELLOWOLD,输出:HOBOBELLOBOWOBOLD

如有任何帮助,请提供解释,我们将不胜感激。

最佳答案

您可以使用正则表达式 character class通过 String#replaceAll 将所有元音替换为 "OB{vowel}"。例如

final String test = s.replaceAll("[AEIOU]", "OB$0");

$0代表匹配的字符串,即元音。


您在结果中得到重复的“OB”字符串的原因是您的 for 循环。问题是您在每次迭代中添加了更多元音,即“OB”中的“O”,因此当您进行“O”迭代时,它会替换您添加的元音。

关于java - 在每个元音前添加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51718711/

相关文章:

arrays - 通过数组获取 Firebase 数据

c - 为什么在 C 中使用错误的格式说明符会使我的程序在 Windows 7 上崩溃?

java.lang.NumberFormatException : For input string: "23 " 异常

java - 在复杂的定界符上有条件地拆分字符串

java - Chronicle 产品支持 32 位 JVM 和 Java 8

java - 转换数组以包含每个项目的副本

java - Android数据库文件结构是什么

.net - 将 HashSet<T> 转换为 .NET 中的数组

c - 选择排序程序产生不正确的输出

java - 什么可能导致 String.charAt(0) 不打印任何内容,并且字符类型为 "16"?