СКТ - Лекция №2
.pdfКонструкции regex
Конструкция Regex |
Что считается совпадением |
. |
Любой символ |
|
|
? |
Ноль (0) или одно (1)повторение предшествующего |
|
|
* |
Ноль (0) или более повторений предшествующего |
|
|
+ |
Одно (1) или более повторений предшествующего |
|
|
[] |
Диапазон символов или цифр |
|
|
^ |
Отрицание последующего (то есть, "не что-то") |
|
|
\d |
Любая цифра (иначе, [0-9]) |
|
|
\D |
Любой нецифровой символ (иначе, [^0-9]) |
|
|
\s |
Любой символ-разделитель (иначе, [\n\t\f\r]) |
|
|
\S |
Любой символ, отличный от разделителей (иначе, [^\n\t\f\r]) |
|
|
\w |
Любая буква или цифра (иначе, [A-Za-Z_0-9]) |
|
|
\W |
Любой знак, отличный от буквы или цифры (иначе, [^\w]) |
Пример использования
Pattern pattern = Pattern.compile("a.*string"); Matcher matcher = pattern.matcher("a string"); boolean didMatch = matcher.matches(); System.out.println(didMatch);
int patternStartIndex = matcher.start(); System.out.println(patternStartIndex); int patternEndIndex = matcher.end(); System.out.println(patternEndIndex);
matches() сообщает, совпадает ли с моделью вся входная последовательность;
start() указывает значение индекса в строке, с которого начинается совпадение;
end() указывает значение индекса в строке, на котором совпадение заканчивается, плюс единица.
Более сложный случай
String input = "Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord."; Pattern pattern = Pattern.compile("[A-Z][a-z]*([A-Z][a-z]*)+");
Matcher matcher = pattern.matcher(input); while (matcher.find()) {
System.out.println("Found this wiki word: " + matcher.group());
}
Замена строк
String input = "Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord."; Pattern pattern = Pattern.compile("[A-Z][a-z]*([A-Z][a-z]*)+");
Matcher matcher = pattern.matcher(input); System.out.println("Before: " + input);
String result = matcher.replaceAll("replacement"); System.out.println("After: " + result);
Родовые типы
•Родовые типы - это механизм компилятора, посредством которого можно некоторым стандартным образом создавать (и использовать) типы (классов, интерфейсов и т.п.), получая единый код и параметризуя (или стандартизуя) все остальное.
Пример использования коллекции без родового типа
public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add("A String"); arrayList.add(new Integer(10)); arrayList.add("Another String"); processArrayList(arrayList);
}
A
private static void processArrayList(ArrayList theList) { for (int aa = 0; aa < theList.size(); aa++) {
String s = (String) theList.get(aa);
}
}
Перечислимые типы
•Перечисляемый тип enum - это множество постоянных объектов, связанных с определенным понятием, каждый из которых представляет собой некоторое постоянное значение из этого множества.
•До перечислимых типов приходилось определять множество постоянных значений.
Пример перечислимых типов
public enum Gender {
MALE("male"), FEMALE("female");
A
private String displayName;
A
private Gender(String displayName) { this.displayName = displayName;
}
A
public String getDisplayName() { return this.displayName;
}
}
Операции ввода/вывода
•Чаще всего данные, используемые в Java-программах, поступают из внешних источников, таких как база данных, прямая передача байтов через сокет или хранилище файлов. Язык Java предоставляет множество инструментов для получения информации из этих источников, и большинство из них находятся в пакете java.io.
•Из всех источников данных, доступных для Java-приложений, файлы ― наиболее распространенный и часто наиболее удобный. Если Java-приложение должно прочесть файл, нужно использовать потоки (streams), которые преобразуют входящие байты в типы языка Java.
•java.io.File - это класс, который определяет ресурс файловой системы и представляет этот ресурс абстрактным образом.
Пример создания файла
File f = new File("temp.txt"); if (f.exists()) {
//Файл существует. Обработать его...
}else {
//Файл не существует. Создать его...
try { f.createNewFile();
} catch (IOException e) {
//TODO Auto-generated catch block e.printStackTrace();
}
}