public Word(String word) { this.word = word.trim(); this.syllables = new ArrayList<Syllable>(); SyllabicSeparation syllabicSeparation = splitSyllablesOfThisWord(); List<String> syllables = syllabicSeparation.getSyllables(); for (int i = 0; i < syllables.size(); i++) { // check if this syllable is the tonic syllable. if (i == syllabicSeparation.getTonicSyllableIndex()) { this.syllables.add(new Syllable(syllables.get(i), Tonicity.TONICA)); } else { this.syllables.add(new Syllable(syllables.get(i), Tonicity.ATONA)); } } this.numSyllables = this.syllables.size(); }
private SyllabicSeparation splitSyllablesOfThisWord() { SyllabicSeparation ss = new SyllabicSeparation(); int wordLength = this.word.length(); String syllable = ""; String letter = ""; String prev = ""; String post = ""; for (int i = 0; i < wordLength; i++) { letter = String.valueOf(this.word.charAt(i)); post = ((i + 1) >= wordLength) ? "" : String.valueOf(this.word.charAt(i + 1)); String prevPrevLetter = ((i - 2) < 0) ? "" : String.valueOf(this.word.charAt(i - 2)); String nextPost = ((i + 2) >= wordLength) ? "" : String.valueOf(this.word.charAt(i + 2)); if (syllable.equals("")) { syllable = syllable + letter; } else if (letter.equals(prev)) { ss.addSyllable(syllable); syllable = letter; } else if (isConsonant(letter)) { if (isConsonant(prev)) { if (isConsonant(post) && !inArray(post.toUpperCase(), new String[] {"L", "R", "H"})) { syllable = syllable + letter; } else if (prev.toUpperCase().equals("D") && !letter.toUpperCase().equals("R")) { ss.addSyllable(syllable); syllable = letter; } else if (prev.toUpperCase().equals("N") && letter.toUpperCase().equals("R")) { ss.addSyllable(syllable); syllable = letter; } else if (inArray(letter.toUpperCase(), new String[] {"L", "R", "H"})) { syllable = syllable + letter; } else if (i == 1) { syllable = syllable + letter; } else { ss.addSyllable(syllable); syllable = letter; } } else if (isVogal(prev)) { if (isConsonant(post) && (!inArray(post.toUpperCase(), new String[] {"L", "R", "H"}) || (letter.toUpperCase().equals(post.toUpperCase())) || letter.toUpperCase().equals("N"))) { if (inArray(letter.toUpperCase(), new String[] {"N"}) && inArray(post.toUpperCase(), new String[] {"H"})) { ss.addSyllable(syllable); syllable = letter; } else { syllable = syllable + letter; } } else if (isConsonant(post) && letter.toUpperCase().equals("D") && post.toUpperCase().equals("R")) { syllable = syllable + letter; } else if (isVogal(post)) { ss.addSyllable(syllable); syllable = letter; } else { ss.addSyllable(syllable); syllable = letter; } } } else if (isVogal(letter)) { if (isConsonant(prev)) { syllable = syllable + letter; } else if (isVogal(prev)) { if ((vogal(prev).equals("U")) && (i > 1) && (inArray(prevPrevLetter.toUpperCase(), new String[] {"Q", "G"}))) { syllable = syllable + letter; } else if ((vogal(prev).equals("U")) && (vogal(letter).equals("I")) && (isConsonant(post))) { syllable = syllable + letter; } else if (hasAccentuation(letter) || (inArray(post.toUpperCase(), new String[] {"M", "N"}) && !isVogal(nextPost))) { ss.addSyllable(syllable); syllable = letter; } else if (!post.equals("") && isVogal(post) && isGreater(letter, post)) { ss.addSyllable(syllable); syllable = letter; } else if (isGreater(prev, letter)) { syllable = syllable + letter; } else { ss.addSyllable(syllable); syllable = letter; } } } prev = letter; } ss.addSyllable(syllable); int numSyllables = ss.getSyllables().size(); int tonicSyllIndex = 0; if (numSyllables != 1) { int proparoxitona = numSyllables - 3; int paroxitona = numSyllables - 2; int oxitona = numSyllables - 1; tonicSyllIndex = paroxitona; if (hasAccentuation(ss.getSyllables().get(oxitona))) { tonicSyllIndex = oxitona; } else if (hasAccentuation(ss.getSyllables().get(paroxitona))) { tonicSyllIndex = paroxitona; } else if (numSyllables > 2 && hasAccentuation(ss.getSyllables().get(proparoxitona))) { tonicSyllIndex = proparoxitona; } else if (isOxitona(ss.getSyllables().get(oxitona))) { tonicSyllIndex = oxitona; } } ss.setTonicSyllableIndex(tonicSyllIndex); return ss; }