Я не знаю, какую версию Java вы используете, но в Java 8 я бы использовал потоки примерно так:
Arrays.stream(fullname.split(" ")).filter(namePart -> Arrays.stream(strst).noneMatch(str -> str.trim().equals(namePart))).collect(Collectors.joining(" "));
для меня вывод пришел как ты хотел.
EDIT
Это относится к JAVA 7. Перед этим вам нужно выполнить собственный поиск.
String fullname="Mr Vivek N Nandakumar Sr";
String [] strst={"Sr.", "sr.", "Jr.", "jr.","Jr ","jr ","Sr ","sr "," Jr"," jr"," Sr"," sr",",I",".I","I.","II","III"," IV","IV ",".IV",",IV", "V.","V ",".V",",V","VI", "VII", "VIII", "IX", "X" ,"M.D","MBA","PhD","M.A","Mr.","Mr ","Mrs.","Miss","MISS","miss","MR ","MRS ","mr ","mrs "," mr"," mrs","Dr ","DR ","Dr.","DR.",")","("};
Arrays.sort(strst);
StringBuilder sb = new StringBuilder();
for (String namePart :
fullname.split(" ")) {
if (Arrays.binarySearch(strst, namePart, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.trim().compareTo(o2.trim());
}
}) < 0 ) {
sb.append(namePart).append(" ");
}
}
return sb.toString();