在每个元音字母前添加文本

3

你好,我正在尝试在文本中的每个元音字母(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;
}

但是,当我传递一个字符串时,它会在第一个元音字母之前打印出两个OB。 例如输入: HELLOWORLD,输出: HOBOBELLOBOWOBOLD。
如果能提供解释,将不胜感激。

4
用循环实现这个问题的难点在于每次迭代都会添加更多的元音字母,例如“OB”中的“O”。 - Phil
1个回答

4

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

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

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


你在结果中得到重复的 "OB" 字符串是因为你的 for 循环。问题在于每次迭代都会添加更多的元音字母,即 "OB" 中的 "O",因此当你迭代到 "O" 时,它正在替换你添加的那些字母。


谢谢,这很有效率。为什么变量上要加“final”?另外,如果可以的话,您知道为什么我的代码在第一个元音字母上重复了OB吗? - Aztolz
好的,现在明白了,非常抱歉,我很新手。 - Aztolz
@Aztolz 我已经将额外的信息添加到我的答案中,这样所有内容都在同一个地方了。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接