编写一个函数RegularPlural,其功能是实现一个英文单词的复数形式。复数的规则为:
(1) 如果单词末尾为s,x,z,ch或sh,则在后面加es
(2) 如果单词末尾为y,且前一个字母为辅音(除a, e, i, o, u以外的其它情况),则把y改成ies。
(3) 如果是其它情形,一律在后面加s。
编写测试程序,输入一个长度小于20的单词,输出该单词的复数形式。
输入:
box
输出:
boxes
思路:
准备三个char类型数组
①将输入的String类型转换成为char类型数组
②第二个数组则使用在满足第二个条件后重新组合
③第三个则是存储判断除去5个元音外的其他辅音字母。
第一点和第三点我们可以直接进行if(判断即可)如果满足,直接使用return退出当前方法。
而第二点才是本道题考察的重点,一开始我是这样想的
word[word.length-1]=='y' && (word[word.length-2] != 'a' ||word[word.length-2] != 'e' ||word[word.length-2] != 'i' ||word[word.length-2] != 'o' || word[word.length-2] != 'u'))
很明显这条语句是存在问题的,因为它不能实现执行了第一条就退出。
后来我转换了思路,我们可以通过ASCII码存入21个辅音字母,然后在和倒数第二个字母一一比对,当符合条件的进行处理后退出即可!
当然我们也可以使用5个独立的if语句,但是每个里面都要写转换格式。
完整代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String wordStr = scan.nextLine();
RegularPlural(wordStr);
}
public static void RegularPlural(String wordStr){
char[] word = wordStr.toCharArray();
char[] newWord = new char[word.length - 1];
char[] keyValue = new char[125];
for (int i = 98 ; i < 101; i++){
keyValue[i] = (char) i;
}
for (int i = 102 ; i < 105; i++){
keyValue[i] = (char) i;
}
for (int i = 106 ; i < 111; i++){
keyValue[i] = (char) i;
}
for (int i = 112 ; i < 117; i++){
keyValue[i] = (char) i;
}
for (int i = 118 ; i < 123; i++){
keyValue[i] = (char) i;
}
if (word[word.length-1]=='s' || word[word.length-1]=='z' || word[word.length-1]=='x' ||
(word[word.length-1]=='h'&&word[word.length-2]=='s') || (word[word.length-1]=='h'&&word[word.length-2]=='c')){
System.out.println(wordStr + "es");
return;
}
if(word[word.length-1]=='y') {
for (int i = 98; i < keyValue.length; i++){
if (word[word.length - 2] == keyValue[i]){
for (int j = 0 ; j < word.length - 1; j++){
newWord[j] = word[j];
}
String newWordStr = String.valueOf(newWord);
System.out.println(newWordStr + "ies");
return;
}
}
}
System.out.println(wordStr + "s");
}
}
测试结果:
![](https://img-blog.csdnimg.cn/img_convert/19afa35354f2887701360a1d2445e399.png)