我正在创建一个程序,它将一个字符串变量带入我的方法,该字符串变量被复制到我创建的新字符串变量中。然后它接受我的新字符串变量并检查我的String中的任何元音。然后它接受元音并用replaceAll()
方法将它们加倍。我目前只是想弄清楚如何将非元音加倍。因此,例如,"easy!!"
的输出应为"eeaasssyyy!!!!!!
。
我正在寻找一种简单的方法 - 任何建议?我是编程的新手,字符串让我难过。
public class RepeactChars
{
public static void main(String[] args)
{
System.out.println(repeatChars("easy!!"));
System.out.println(repeatChars("abc"));
System.out.println(repeatChars("apple"));
System.out.println(repeatChars("Homework"));
System.out.println(repeatChars("Spring"));
System.out.println(repeatChars("Integer"));
}
public static String repeatChars(String x)
{
String str = x;
str = str.replaceAll("a", "aa");
str = str.replaceAll("e", "ee");
str = str.replaceAll("i", "ii");
str = str.replaceAll("o", "oo");
str = str.replaceAll("u", "uu");
return str;
}
}
答案 0 :(得分:3)
我会使用两个正则表达式;反向顺序一到三个辅音(一切都不是aeiou
),一个加倍元音(aeiou
)。像,
public static String repeatChars(String x) {
return x.replaceAll("([aeiou])", "$1$1").replaceAll("([^aeiou])", "$1$1$1");
}
我得到了
eeaasssyyy!!!!!!
aabbbccc
aapppppplllee
HHHoommmeewwwoorrrkkk
SSSppprrriinnnggg
IIInnnttteegggeerrr
为了完整起见,您还可以使用StringBuilder
来实现它,这是switch
case
存在的优雅解决方案(至少在我的位置)意见)。例如,
public static String repeatChars(String x) {
StringBuilder sb = new StringBuilder();
for (char ch : x.toCharArray()) {
switch (ch) {
case 'a': case 'e': case 'i': case 'o': case 'u':
sb.append(ch).append(ch);
break;
default:
sb.append(ch).append(ch).append(ch);
break;
}
}
return sb.toString();
}
输出相同的内容。
答案 1 :(得分:0)
您的方法效率不高,因为每个replaceAll
调用都会遍历整个字符串。
基本方法是循环遍历字符串,对于每个字符,请问"它是元音。"如果是,加倍,否则三倍。
你应该真的使用StringBuilder
课程,但在这个例子中我不会。
public static String repeatChars(String x)
{
String newStr = "";
for (int i = 0; i < x.length(); ++i) {
char c = x.charAt(i);
int repeatTimes = "aeiou".indexOf(x.charAt(i)) == -1 ? 3 : 2;
for (int j = 0; j < repeatTimes; ++j) {
newStr += c;
}
}
return newStr;
}
它有点罗嗦,但它比使用正则表达式更有效。
答案 2 :(得分:0)
您的解决方案的固有问题是您必须列出要使用的每个字符。解决这个问题的方法是遍历每个char并生成一个新字符串:
static String change(String in){
String out = "";
for(int i = 0; i < in.length(); i++){
char letter = in.charAt(i);
out += repeat(isVowel(letter)?3:2, letter);
}
return out;
}
static boolean isVowel(char c){
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
public static String repeat(int count, char with) {
return new String(new char[count]).replace("\0", ""+with);
}