public static List<String> toWordList(String s, boolean allowUnderscore) { List<String> ss = new ArrayList<>(); int n = s.length(); for (int i = 0; i < n;) { while (i < n) { if ((allowUnderscore && s.charAt(i) == '_') || !isPunct(s.charAt(i))) { break; } i++; } if (i >= n) { break; } int b = nextBreak(s, i, allowUnderscore); String w = (b == -1) ? s.substring(i) : s.substring(i, b); ss.add(escape(capitalize(w))); if (b == -1) { break; } i = b; } return ss; }
public static List<String> toWordList(String s, boolean allowUnderscore) { List<String> ss = new ArrayList<>(); int n = s.length(); for (int i = 0; i < n;) { while (i < n) { if ((allowUnderscore && s.charAt(i) == '_') || !isPunct(s.charAt(i))) { break; } i++; } if (i >= n) { break; } int b = nextBreak(s, i, allowUnderscore); String w = (b == -1) ? s.substring(i) : s.substring(i, b); ss.add(escape(capitalize(w))); if (b == -1) { break; } i = b; } return ss; }
private static int nextBreak(String s, int start, boolean allowUnderscore) { int n = s.length(); char c1 = s.charAt(start); int t1 = classify(c1); for (int i = start + 1; i < n; i++) { int t0 = t1; c1 = s.charAt(i); t1 = classify(c1); switch (ACTION_TABLE[t0 * 5 + t1]) { case ACTION_CHECK_PUNCT: if (isPunct(c1) && !(allowUnderscore && c1 == '_')) { return i; } break; case ACTION_CHECK_C2: if (i < n - 1) { char c2 = s.charAt(i + 1); if (isLower(c2)) { return i; } } break; case ACTION_BREAK: return i; default: } } return -1; }
private static int nextBreak(String s, int start, boolean allowUnderscore) { int n = s.length(); char c1 = s.charAt(start); int t1 = classify(c1); for (int i = start + 1; i < n; i++) { int t0 = t1; c1 = s.charAt(i); t1 = classify(c1); switch (ACTION_TABLE[t0 * 5 + t1]) { case ACTION_CHECK_PUNCT: if (isPunct(c1) && !(allowUnderscore && c1 == '_')) { return i; } break; case ACTION_CHECK_C2: if (i < n - 1) { char c2 = s.charAt(i + 1); if (isLower(c2)) { return i; } } break; case ACTION_BREAK: return i; default: } } return -1; }