1, You could eliminate the matchFound
flag if you create a label for your outer for
loop and call break
with this label:
matchLoop: for (final String[] synonymArr : mSynonyms) {
for (int j = 0; j < synonymArr.length; j++) {
if (inArr[i].equalsIgnoreCase(synonymArr[j])) {
inArr[i] = synonymArr[ROOT_WORD];
break matchLoop;
}
}
}
Anyway, I think using labels is more or less is bad smell, so try to extract out the loops to separate methods.
2, I'd create at lestleast a Word
class which stores the (root)word and its synonyms. I should result more readable the code in the Synonymiser
class too:
public class Word {
private final String rootWord;
private final Set<String> synomins;
public Word(final String rootWord, final Collection<String> synomins) {
super();
// TODO: empty String/null check
this.rootWord = rootWord;
// TODO: convert the input to lowercase (it helps contains())
this.synomins = new HashSet<String>(synomins);
this.synomins.add(rootWord);
}
public static Word createWord(final String rootWord, final String... synonims) {
final List<String> synonimList = Arrays.asList(synonims);
return new Word(rootWord, synonimList);
}
public boolean contains(final String word) {
// TODO: convert word to lowercase for proper comparison
if (synomins.contains(word)) {
return true;
}
return false;
}
public String getRootWord() {
return rootWord;
}
}