Метод compareTo
сравнивает две строки лексикографически
String s1 = "aaa";
String s2 = "bbb";
// Сравнить две строки с учетом регистра
if (s1.compareTo(s2) > 0)
System.out.println("s1 больше s2 (правее лексикографически)");
else if (s1.compareTo(s2) < 0)
System.out.println("s1 меньше s2 (левее лексикографически)");
else
System.out.println("s1 равна s2");
Метод compareToIgnoreCase
сравнивает две строки лексикографически без учета регистра
// Сравнить две строки без учета регистра
if (s1.compareToIgnoreCase(s2) > 0)
System.out.println("s1 больше s2 (правее лексикографически)");
else if (s1.compareToIgnoreCase(s2) < 0)
System.out.println("s1 меньше s2 (левее лексикографически)");
else
System.out.println("s1 равна s2");
String s = "Hello planet earth, you are a great planet";
// Привести строку к нижнему регистру
s = s.toLowerCase();
// Разделить строку на токены
String tokens[] = s.split(" ");
// Упорядочить массив строк лексикографически
Arrays.sort(tokens);
// Напечатать массив строк
System.out.println(Arrays.toString(tokens));
Регулярные выражения — это механизм для поиска и замены текста; шаблоны для сопоставления последовательностей символов в строках.
Регулярные выражения позволяют проверить соответствие строки шаблону.
// Скомпилировать регулярное выражение
Pattern p = Pattern.compile("a*b");
// Сопоставить заданную строку с регулярным выражением
String s = "aaaab";
Matcher m = p.matcher(s);
boolean b = m.matches();
Альтернативно можно использовать метод matches класса Pattern.
boolean b1 = Pattern.matches("a*b", "aaaab");
или метод matches объектов типа String
boolean b2 = "aaaab".matches("a*b");
Регулярные выражения позволяют делать замены в тексте.
// Удалить лишние пробелы
String s = "bla bla bla bla bla bla";
s = s.replaceAll("\\s+", " ");
System.out.println(s);
Выполнить токенизацию с учетом дополнительных символов-разделителей.
// Разделить строку на токены
String s = "bla, bla. bla; bla bla bla...";
String tokens[] = s.replaceAll("[.,;]", "").split("\\s+");
System.out.println(Arrays.toString(tokens));
Пример валидации телефонных номеров с помощью регулярных выражений.
String phones[] = {
"+7-902-111-22-33",
"8 902 111 2233",
"+7 (495) 123-22-33",
"+1 000 000 00 00"
};
for (String phone: phones) {
String replaced = phone.replaceAll("[-() ]", "");
boolean validPhone = Pattern.matches("(\\+7|8)\\d{10}", replaced);
if (validPhone)
System.out.println(phone + " is a valid phone number");
else
System.out.println(phone + " is not a valid phone number");
}
Часть I
- Сравнить две строки с помощью компаратора
- Упорядочить массив слов по алфавиту
- Найти палиндромы среди слов некоторой строки
Часть II
- Исключить из строки все символы, кроме чисел и пробелов, с помощью регулярных выражений
- Заменить в строке все знаки препинания на пробел с помощью регулярных выражений
- Реализовать валидацию адресов электронной почты по регулярному выражению
- Реализовать валидацию арифметических выражений по регулярному выражению
Часть III
- Вычислить расстояние Левенштейна между всеми парами слов в строке
- Определить степень схожести двух слов по звучанию (произношению) с помощью фонетического алгоритма (слова задаются пользователем)
- Создание объектов типа String
- Сравнение строк
- Неизменяемость строк
- Регулярные выражения
- Г. Шилдт. Java Руководство для начинающих. Глава 5
- Лексикографический порядок
- Регулярные выражения
- Синтаксис регулярных выражений
- Онлайн редактор регулярных выражений
- Расстояние Левенштейна
- LevenshteinDistance — класс для вычисления расстояния Левенштейна из Apache Commons Text
- Фонетический алгоритм
- Soundex — класс реализации фонетического алгоритма Soundex из Apache Commons Codec