2016-10-25 7 views
0

Ich habe dieses Programm, das einige Singular Nomen Plural machen kann (Ich weiß, ich vermisse viel, aber das ist neben dem Punkt). Wenn ich ein Wort wie "Mann des Krieges" eintrage, kehrt es als "mans-of-war" statt "men-of-war" zurück. Wie behebe ich das? Mein Code kann schon Menschen zu Männern machen, nur nicht in dem Fall, den ich erwähnte. Auch für dieses Programm wird jedes zusammengesetzte Wort den Bindestrich haben, es ist einfach für die Praxis.Making zusammengesetzte Wörter in Plural

public class LanguageUtils { 

static boolean checkException(String noun){ 
    String[] exceptions = {"fish", "fox", "deer", "moose", "sheep", "cattle","pants","scissors"}; 
    for(int i=0;i<exceptions.length;i++) { 
     if(exceptions[i].equals(noun)) 
      return true; 
    } 
    return false;  
} 

static boolean EnglishConsonant(char ch) { 
    switch (Character.toLowerCase(ch)) { 
     case 'a': case 'e': case 'i': case 'o': case 'u': 
      return false; 
     default: 
      return true; 
    } 
} 

static String makePlural (String noun){ 
    String pluralWord = ""; 
    int length = noun.length(); 
    String strippedWord = noun.substring(0, noun.length()-1); 
    char lastLetter = noun.charAt(noun.length()-1); 

    if(noun.contains("-")){ 
     String nounsaver = noun.substring(noun.indexOf('-'), noun.length()); 
     pluralWord = noun.substring(0,noun.indexOf('-')) + "s" + nounsaver; 
    } 
    else{ 
    switch (lastLetter){ 
     case 's': 
     case 'x': 
     case 'z': 
      if(noun.equals("ox")){ 
       pluralWord = noun + "en"; 
       break; 
      } 
      else{ 
       pluralWord = noun + "es"; 
       break; 
      } 
     case 'o': 
      if(EnglishConsonant(noun.charAt(noun.length()-2))){ 
       pluralWord = strippedWord + "oes"; 
       break; 
      } 
     case 'e': 
      char f = noun.charAt(noun.length()-2); 
      String prec = noun.substring(0, noun.length()-2); 
      if(f == 'f'){ 
       pluralWord = prec + "ves"; 
       break; 
      } 
      if(noun.equals("goose")){ 
       pluralWord = "geese"; 
       break; 
      } 
      else{ 
       pluralWord = noun + "s"; 
       break; 
      } 
     case 'h': 
      if ((noun.charAt(noun.length()-2)== 'c') || (noun.charAt(noun.length()-2)== 's')) { 
       pluralWord = noun + "es"; 
       break; 
      } 
     case 'f': 
      if (EnglishConsonant(noun.charAt(noun.length()-2))) { 
       pluralWord = strippedWord + "ves"; 
       break; 
      } 
     case 'y': 
      if (EnglishConsonant(noun.charAt(noun.length()-2))) { 
       pluralWord = strippedWord + "ies"; 
       break; 
      } 
     default:  
      if(noun.equals("foot")){ 
       pluralWord = "feet"; 
       break; 
      } 
      if(noun.endsWith("man")){ 
       pluralWord = noun.substring(0, noun.length()-3)+"men"; 
       break; 
      } 
      else{ 
       pluralWord = noun + "s"; 
       break; 
      } 
    } 
    } 
    if (length == 1){ 
     pluralWord = noun + "'s"; 
    } 
    if(checkException(noun)){ 
     pluralWord = noun; 
    } 
    return pluralWord; 
} 

}

+0

siehe String.indexOf oder Muster & Matcher – ControlAltDel

Antwort

0

Wenn es mit einem zusammengesetzten Wort zu tun, wenn Sie einen Teil pluralize benötigen, rufen Sie eine Funktion zu tun entworfen nur das: makePlural.

0

Wenn Sie haben - dann brechen Sie die Wörter und rufen Sie die makePlural für diese Wörter erneut.

0

können Sie String#replace verwenden:

if (noun.contains("man")) { 
    pluralWord = noun.replace("man", "men"); 
    break; 
}