guava/src/com/google/common/base/Strings.java
public static String commonPrefix(CharSequence a, CharSequence b) {
    checkNotNull(a);
    checkNotNull(b);

    int maxPrefixLength = Math.min(a.length(), b.length());
    int p = 0;
    while (p < maxPrefixLength && a.charAt(p) == b.charAt(p)) {
      p++;
    }
    if (validSurrogatePairAt(a, p - 1) || validSurrogatePairAt(b, p - 1)) {
      p--;
    }
    return a.subSequence(0, p).toString();
  }
public static String commonPrefix(CharSequence a, CharSequence b) {
    checkNotNull(a);
    checkNotNull(b);

    int maxPrefixLength = Math.min(a.length(), b.length());
    int p = 0;
    while (p < maxPrefixLength && a.charAt(p) == b.charAt(p)) {
      p++;
    }
    if (validSurrogatePairAt(a, p - 1) || validSurrogatePairAt(b, p - 1)) {
      p--;
    }
    return a.subSequence(0, p).toString();
  }
public static String commonPrefix ( CharSequence a , CharSequence b ) { checkNotNull ( a ) ; checkNotNull ( b ) ; int maxPrefixLength = Math . min ( a . length ( ) , b . length ( ) ) ; int p = 0 ; while ( p < maxPrefixLength && a . charAt ( p ) == b . charAt ( p ) ) { p ++ ; } if ( validSurrogatePairAt ( a , p - 1 ) || validSurrogatePairAt ( b , p - 1 ) ) { p -- ; } return a . subSequence ( 0 , p ) . toString ( ) ; }
Returns the longest string {@code prefix} such that {@code a.toString().startsWith(prefix) &&
b.toString().startsWith(prefix)}, taking care not to split surrogate pairs. If {@code a} and
{@code b} have no common prefix, returns the empty string.

@since 11.0
Returns the longest string { @code prefix } such that { @code a . toString () . startsWith ( prefix ) && b . toString () . startsWith ( prefix ) } taking care not to split surrogate pairs . If { @code a } and { @code b } have no common prefix returns the empty string .