Разделитель строки на ФИО (без регулярных выражений) JAVA
ФИО должно состоять только из букв и символа дефис (в случае двойного имени/фамилии/отчества). Никаких других символов не должно допускаться. Не могу понять как сделать проверку, НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ. (единственное что нашёл это hasNextInt, чтобы отсечь числа);
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {
System.out.println("Введенная строка не является ФИО");
} else {
String name = scanner.nextLine();
if (name.equals(" ")) {
System.out.println("Введенная строка не является ФИО");
}
int count = 0;
for (int i = 0; i < name.length(); i++) {
if (Character.isWhitespace(name.charAt(i))) count++;
}
if (count > 2) {
System.out.println("Введенная строка не является ФИО");
} else {
if (count == 0) {
System.out.println("Введенная строка не является ФИО");
} else {
int familyIndex = name.indexOf(' ');
int nameIndex = name.lastIndexOf(' ');
String familyIndex1 = name.substring(0, familyIndex).trim();
System.out.println("Фамилия: " + familyIndex1);
String nameIndex1 = name.substring(familyIndex, nameIndex).trim();
String patronymicIndex = name.substring(nameIndex).trim();
if (nameIndex1.equals("")) {
System.out.println("Имя: " + patronymicIndex);
System.out.println("У человека нет отчества");
} else {
System.out.println("Имя: " + nameIndex1);
System.out.println("Отчество: " + patronymicIndex);
}
}
}
}
}
}
Ответы (1 шт):
Автор решения: ЮрийСПб
→ Ссылка
Очень размытые требования. Можно например так: только буквы, пробелы и дефис.
String fio = ...;
for (Char c: fio) {
if (c.isLetter() || c == '-' || c == ' ') {
continue;
} else {
throw IllegalArgumentException("Not valid fio");
}
}
Однако, такое пропустит всякое типа tetsбе-бе-бе