用 String.join() 和 split() 方法替换字符串中的所有元音
Replacing all vowels in string with String.join() and split() methods
我需要用相同的元音替换给定字符串中的每个元音,然后是字母“v”,然后是第二次元音。例如:bad
应该变成 bavad
,egg
变成 evegg
,doge
变成 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);
}
此解决方案适用于 bad
、sad
、step
等字符串。但是,如果我尝试使用 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;
}
我需要用相同的元音替换给定字符串中的每个元音,然后是字母“v”,然后是第二次元音。例如:bad
应该变成 bavad
,egg
变成 evegg
,doge
变成 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);
}
此解决方案适用于 bad
、sad
、step
等字符串。但是,如果我尝试使用 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;
}