Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СКТ - Лекция №2

.pdf
Скачиваний:
10
Добавлен:
09.05.2015
Размер:
374.2 Кб
Скачать

Конструкции 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();

}

}