Вы можете использовать регулярные выражения, в частности String.replaceAll(String regex, String replacement)
, чтобы изменить порядок имени и фамилии.
String[] names = { "John A. Doe", "James Bond" };
for (int i = 0; i < names.length; i++) {
names[i] = names[i].replaceAll("(.*) (.*)", "$2, $1");
System.out.println(names[i]);
}
Это печатает:
Doe, John A.
Bond, James
Однако, если единственная причина, по которой вы меняете местами, заключается в том, что вы позже хотите сортировать по фамилиям, то вам на самом деле вообще не нужно менять местами. Просто инкапсулируйте код, извлекающий фамилию, во вспомогательный метод (чтобы его можно было тестировать, использовать повторно и т. Д.), А затем используйте его в своем пользовательском java.util.Comparator
для java.util.Arrays.sort
import java.util.*;
//...
static String lastName(String name) {
return name.substring(name.lastIndexOf(' '));
}
//...
String[] names = { "John A. Doe", "James Bond" };
Comparator<String> lastNameComparator = new Comparator<String>() {
@Override public int compare(String name1, String name2) {
return lastName(name1).compareTo(lastName(name2));
}
};
Arrays.sort(names, lastNameComparator);
for (String name : names) {
System.out.println(name);
}
Это печатает:
James Bond
John A. Doe
Обратите внимание, что в обоих фрагментах это последний индекс пробела, который используется для определения границы между именем и фамилией.