Возможно, у вас есть BOM (Byte Order Marker) в начале файла.По определению они будут интерпретироваться как неразрывный пробел нулевой ширины.
Так что если у вас есть
String textA = new String(new byte[] { (byte)0xef, (byte)0xbb, (byte) 0xbf, 65}, "UTF-8");
String textB = new String(new byte[] { 66}, "UTF-8");
System.err.println(textA + " < " + textB + " = " + (textA.compareTo(textB) < 0));
Символ должен отображаться в вашей длине строк, поэтому попробуйте распечататьдлина каждой строки.
System.out.println(words[k] + " " + words[k].length());
И используйте список или какую-либо другую структуру, чтобы вам не приходилось читать файл дважды.