我必须编写一个接收String的方法并返回一个新的字符串,该字符串复制所有元音并在其间放置一个“b”。唯一的例外是diphtongs,其中“ab”应放在diphtong前面。
例如:“你好”会返回“hebellobo” “听证会”会回归“坚持”
我已经尝试了几个小时的代码,但我没有做任何事情。 好吧,没有任何东西,但不能让元音运行正常,根本没有到达diphtongs。 这是我的代码:
static Scanner sc = new Scanner(System.in);
public static void main(String[] args)
{
System.out.print("Enter a string: ");
String s = sc.nextLine();
String originalString = s;
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if ((c == 'A') || (c == 'a') || (c == 'E') || (c == 'e') || (c == 'I') || (c == 'i') || (c == 'O')
|| (c == 'o') || (c == 'U') || (c == 'u'))
{
String front = s.substring(0, i);
String back = s.substring(i + 1);
s = front + c + "b" + back;
}
}
System.out.println(originalString);
System.out.println(s);
}
感谢任何帮助!
感谢您的帮助,我现在拥有以下代码(不含扫描仪):
public static boolean isVowel(char c) {
// TODO exercise 1 task b) part 1
if (c == 'a' || c == 'A' || c == 'Ä' || c == 'e' || c == 'E' || c == 'i' || c == 'I' || c == 'o' || c == 'O'
|| c == 'Ö' || c == 'u' || c == 'U' || c == 'Ü') {
return true;
} else {
return false;
}
}
public static String toB(String text) {
// TODO exercise 1 task b) part 2
StringBuilder b = new StringBuilder();
for (int i = 0; i < text.length() - 1; i++) {
char current = text.charAt(i);
char next = text.charAt(i + 1);
if (isVowel(current)) {
if (isVowel(next)) {
// 1 - Is a vowel followed by a vowel
// Prepend b
b.append("b");
// Write current
b.append(current);
// Write next
b.append(next);
i++; // Skip next vowel
} else {
// 2 - Is a vowel followed by a consonant
b.append(current);
b.append("b");
b.append(current);
}
} else {
// 3 - Is a consonant
b.append(current);
}
}
for (int i = 0; i < text.length() - 1; i++) {
char last = text.charAt(text.length() - 1);
char current = text.charAt(i);
if (isVowel(last)) {
// Case 1
b.append(current);
b.append("b");
b.append(current);
// Case 2 is not possible for last letter
} else {
// Case 3
b.append(last);
}
}
// Here b.toString() is the required string
return b.toString();
}
例如,如果你输入“母亲”这个词,那么输出就是“Mobotheberrrrr”,这是完全没问题的,除了它因某种原因重复了最后一个字母'r'。不幸的是,输入“目标”会导致输出“Gboalll”。
答案 0 :(得分:1)
您需要知道当前的信件以及下一封信。
在您的代码中,您只考虑当前的字母。
这是解决问题的框架代码。 基本上你需要检查:
如果当前的字母是辅音
String originalString = ...
StringBuilder b = new StringBuilder();
for (int i = 0; i < s.length() - 1; i++) {
char current = s.charAt(i);
char next = s.charAt(i + 1);
if (isVowel(current)) {
if (isVowel(next)) {
// 1 - Is a vowel followed by a vowel
// Prepend b
b.append("b");
// Write current
b.append(current);
// Write next
b.append(next);
i++; // Skip next vowel
} else {
// 2 - Is a vowel followed by a consonant
b.append(current);
b.append("b");
b.append(current);
}
} else {
// 3 - Is a consonant
b.append(current);
}
}
char last = s.charAt(s.length() - 1);
if (isVowel(last)) {
// Case 1
b.append(current);
b.append("b");
b.append(current);
// Case 2 is not possible for last letter
} else {
// Case 3
b.append(last);
}
// Here b.toString() is the required string
请将此视为骨架,尤其是:
isVowel
注意:使用StringBuilder
仅出于性能原因,直接使用String
会得到相同的结果
答案 1 :(得分:0)
我最好的猜测是制作一系列replaceAlls因为你基本上用重复和b替换元音所以尝试这样的事情:
String original = something;
String adjusted = original.replaceAll("ea","abea").replaceAll("a","aba").replaceAll(...)...;
然后填写规则。确保在检查单个元音之前检查双元音,否则它们将被视为两个单元音