in src/main/java/org/apache/commons/io/FilenameUtils.java [864:923]
public static int getPrefixLength(final String fileName) {
if (fileName == null) {
return NOT_FOUND;
}
final int len = fileName.length();
if (len == 0) {
return 0;
}
char ch0 = fileName.charAt(0);
if (ch0 == ':') {
return NOT_FOUND;
}
if (len == 1) {
if (ch0 == '~') {
return 2; // return a length greater than the input
}
return isSeparator(ch0) ? 1 : 0;
}
if (ch0 == '~') {
int posUnix = fileName.indexOf(UNIX_NAME_SEPARATOR, 1);
int posWin = fileName.indexOf(WINDOWS_NAME_SEPARATOR, 1);
if (posUnix == NOT_FOUND && posWin == NOT_FOUND) {
return len + 1; // return a length greater than the input
}
posUnix = posUnix == NOT_FOUND ? posWin : posUnix;
posWin = posWin == NOT_FOUND ? posUnix : posWin;
return Math.min(posUnix, posWin) + 1;
}
final char ch1 = fileName.charAt(1);
if (ch1 == ':') {
ch0 = Character.toUpperCase(ch0);
if (ch0 >= 'A' && ch0 <= 'Z') {
if (len == 2 && !FileSystem.getCurrent().supportsDriveLetter()) {
return 0;
}
if (len == 2 || !isSeparator(fileName.charAt(2))) {
return 2;
}
return 3;
}
if (ch0 == UNIX_NAME_SEPARATOR) {
return 1;
}
return NOT_FOUND;
}
if (!isSeparator(ch0) || !isSeparator(ch1)) {
return isSeparator(ch0) ? 1 : 0;
}
int posUnix = fileName.indexOf(UNIX_NAME_SEPARATOR, 2);
int posWin = fileName.indexOf(WINDOWS_NAME_SEPARATOR, 2);
if (posUnix == NOT_FOUND && posWin == NOT_FOUND || posUnix == 2 || posWin == 2) {
return NOT_FOUND;
}
posUnix = posUnix == NOT_FOUND ? posWin : posUnix;
posWin = posWin == NOT_FOUND ? posUnix : posWin;
final int pos = Math.min(posUnix, posWin) + 1;
final String hostnamePart = fileName.substring(2, pos - 1);
return isValidHostName(hostnamePart) ? pos : NOT_FOUND;
}