用 String.join() 和 split() 方法替换字符串中的所有元音

Replacing all vowels in string with String.join() and split() methods

我需要用相同的元音替换给定字符串中的每个元音,然后是字母“v”,然后是第二次元音。例如:bad 应该变成 bavadegg 变成 eveggdoge 变成 dovogeve,等等。练习明确指出它需要用 String.join() 方法完成。到目前为止,我想出了 这个。

String string = "bad";
int length = string.length();
for (int i = 0; i < length; i++) {
    char c = string.charAt(i);
    if (isVowel(c)) {
        string = String.join(c + "v" + c, string.split("" + c));
        length += 2;
        i += 2;
    }
}
System.out.println(string);

以下isVowel方法是检查给定字符是否为元音的简单方法

public static boolean isVowel(char c) {
    return Arrays.asList('a', 'u', 'o', 'e', 'i').contains(c);
}

此解决方案适用于 badsadstep 等字符串。但是,如果我尝试使用 aeiou,输出是 avaeveiviovo 而不是 avaeveiviovouvu.

您可以使用字符串来存储结果

String string = "aeiou";
int length = string.length();
String result = "";

for (int i=0; i<length; i++) {
    char c = string.charAt(i);

    if(isVowel(c)) 
       result += String.join(result, c+"v"+c);
    else
       result += c;
}

System.out.println(result);   //Output "avaeveiviovouvu"

正如其他人在评论中提到的,除了您注意到的内容之外,您的代码还有许多其他问题和边缘情况。但我只会回答你原来的问题。由于 String.split() 的行为方式(强调我的),u 未加入:

Splits this string around matches of the given regular expression.

This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.

所以当 a 拆分为 ["", "eiou"] 时,u 变为 [avaeveiviovo] 并且没有空字符串可以连接。

这是一种方法。

String[] data = {"bad", "happy", "computer", "java", "vacuum"};
for (String word : data) {
     System.out.printf("%-10s --> %s%n",word,modVowels(word));
}

打印

bad        --> bavad
happy      --> havappy
computer   --> covompuvutever
java       --> javavava
vacuum     --> vavacuvuuvum
  • 初始化newString为空字符串
  • 然后将单词拆分为一个字符的单独字符串。
  • 如果字符是元音字母,附加修改后的字符串。
  • 否则只需附加字符。
  • 然后 return 结果。
public static String modVowels(String word) {
    String[] chars = word.split("");
    String newString = "";
    for (int i = 0; i < chars.length; i++) {
        String ch = chars[i];
        if ("aeiou".contains(ch)) {
            ch = ch+"v"+ch;
        }
        newString = String.join("",newString, ch);
    }
    return newString;
}