class HyphenWordToPhrase { int pos; int numParts; String in; StringBuilder out; HyphenWordToPhrase(String in) { this.in = in; out = new StringBuilder(in.length()); } String convert() { while (hasMore()) { parseWord(); } String o = out.toString(); if (numParts > 0) { o = "<2>"+o; } return o; } private void parseWord() { parseChars(); parseHyphens(); } private int parseHyphens() { int i = 0; boolean isLeading = i == pos; while (hasMore() && in.charAt(pos) == '-') { pos++; i++; } boolean isTrailing = !hasMore(); if (i > 0) { if (i == 1) { if (!isLeading && !isTrailing) { out.append("<->"); numParts++; } } else if (i > 1) { out.append("<->"); } } return i; } private void parseChars() { char c; while (hasMore() && (c = in.charAt(pos)) != '-') { pos++; out.append(c); } } boolean hasMore() { return pos < this.in.length(); } public static void main(String[] args) { String in = "one-of-a-kind"; HyphenWordToPhrase m = new HyphenWordToPhrase(in); System.out.println(m.convert()); } }