28
Массивы и строки в Java Алексей Владыкин 26 сентября 2012 Алексей Владыкин Массивы и строки в Java 26 сентября 2012 1 / 28

2012 09 26_java_lecture03

Embed Size (px)

Citation preview

Page 1: 2012 09 26_java_lecture03

Массивы и строки в Java

Алексей Владыкин

26 сентября 2012

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 1 / 28

Page 2: 2012 09 26_java_lecture03

1 Массивы

2 СтрокиРабота с кодировкамиРегулярные выражения

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 2 / 28

Page 3: 2012 09 26_java_lecture03

Массивы

1 Массивы

2 СтрокиРабота с кодировкамиРегулярные выражения

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 3 / 28

Page 4: 2012 09 26_java_lecture03

Массивы

Объявление

Массив обозначается квадратными скобками

int[] numbers;String [] args;boolean bits [];char[] letters , digits;float rates[], maxRate;

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 4 / 28

Page 5: 2012 09 26_java_lecture03

Массивы

Создание

Массив создается оператором new

Все элементы массива инициализируются нулямиРазмер массива фиксируется в момент создания

int[] numbers = new int [100];String [] args = new String [1];boolean [] bits = new boolean [0];

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 5 / 28

Page 6: 2012 09 26_java_lecture03

Массивы

Инициализация

Можно перечислить значения всех элементовпри создании массива

int[] numbers = new int[] {1, 2, 3, 4, 5};boolean bits = new boolean [] {true , true , false};

// this works only in variable declarationchar[] digits = {

’0’, ’1’, ’2’, ’3’, ’4’,’5’, ’6’, ’7’, ’8’, ’9’};

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 6 / 28

Page 7: 2012 09 26_java_lecture03

Массивы

Индексация

Элементы индексируются с нуляДлина массива доступна как array.length

При выходе за границы массива бросается исключение

int[] numbers = {1, 2, 3, 4, 5};// numbers.length -> 5// numbers [0] -> 1// numbers [1] -> 2// numbers [4] -> 5// numbers [5] -> ArrayIndexOutOfBoundsException

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 7 / 28

Page 8: 2012 09 26_java_lecture03

Массивы

Многомерные массивы

Многомерный массив — это массив массивов

int [][] matrix0;int [][] matrix1 = new int [2][2];int [][] matrix2 = {{1, 2}, {3, 4}};int[] row = matrix2 [0]

// matrix2 [1][1] -> 4// row[0] -> 1

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 8 / 28

Page 9: 2012 09 26_java_lecture03

Массивы

Многомерные массивы

Разрешены ступенчатые массивы

int [][] triangle = {{1, 2, 3, 4, 5},{6, 7, 8, 9},{10, 11, 12},{13, 14},{15}};

// triangle.length -> 5// triangle [0]. length -> 5// triangle [4]. length -> 1

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 9 / 28

Page 10: 2012 09 26_java_lecture03

Массивы

Представление в памяти

Одномерный массив занимает непрерывный участок памятиДвумерный массив занимает n + 1 участок в памяти,где n — первая размерность

int [][] a = new int [10][1000];int [][] b = new int [1000][10];

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 10 / 28

Page 11: 2012 09 26_java_lecture03

Массивы

java.util.Arrays

copyOf, copyOfRangeequals, deepEqualsfill

sort

binarySearch

toString, deepToString

java.lang.System.arraycopy

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 11 / 28

Page 12: 2012 09 26_java_lecture03

Массивы

Varargs

Специальный синтаксис для массива аргументовПоддерживается с Java 5

int max(int[] numbers );// usage: max(new int[] {1, 2, 3, 4});

int max(int... numbers );// usage: max(1, 2, 3, 4);

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 12 / 28

Page 13: 2012 09 26_java_lecture03

Строки

1 Массивы

2 СтрокиРабота с кодировкамиРегулярные выражения

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 13 / 28

Page 14: 2012 09 26_java_lecture03

Строки

Последовательность символов произвольной длины

Класс java.lang.String

Не то же, что массив символов

Никаких нулевых символов в конце, длина хранится отдельно

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 14 / 28

Page 15: 2012 09 26_java_lecture03

Строки

Создание строк

Строковые литералы

String zeros = "\u0000\u0000";String hello = "Hello";String specialChars = "\r\n\t\"\\";String unicodeEscapes = "\u0101\u2134\u03ff";

Создание из массива символов

char[] charArray = {’a’, ’b’, ’c’};String string = new String(charArray );

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 15 / 28

Page 16: 2012 09 26_java_lecture03

Строки

Доступ к содержимому строки

int length()

char charAt(int index)

char[] toCharArray()

String substring(int beginIndex)String substring(int beginIndex, int endIndex)

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 16 / 28

Page 17: 2012 09 26_java_lecture03

Строки

Сравнение строк

Оператор == сравнивает ссылки, а не содержимое строки

boolean equals(Object anObject)boolean equalsIgnoreCase(String anotherString)

int compareTo(String anotherString)int compareToIgnoreCase(String anotherString)

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 17 / 28

Page 18: 2012 09 26_java_lecture03

Строки

Операции

Строки неизменяемы

boolean startsWith(String prefix)

boolean endsWith(String suffix)

int indexOf(String str)

int lastIndexOf(String str)

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 18 / 28

Page 19: 2012 09 26_java_lecture03

Строки

Операции

Строки неизменяемы

String trim()

String replace(char oldChar, char newChar)

String toLowerCase()

String toUpperCase()

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 19 / 28

Page 20: 2012 09 26_java_lecture03

Строки

Конкатенация строк

String concat(String str)

Оператор +

String helloWorld = "Hello" + " World!";

java.lang.StringBuilder

StringBuilder buf = new StringBuilder ();buf.append("Hello");buf.append(" World");buf.append(’!’);String result = buf.toString ();

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 20 / 28

Page 21: 2012 09 26_java_lecture03

Строки Работа с кодировками

JVM использует для строк кодировку UTF-16(каждый символ занимает один или два char’а)

Кодировка строк в памяти не зависит от платформы или локали

Можно конвертировать данные в другие кодировки

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 21 / 28

Page 22: 2012 09 26_java_lecture03

Строки Работа с кодировками

Преобразование кодировок

byte[] getBytes(String charsetName)

String str = "test";byte[] ascii = str.getBytes("US -ASCII");// ascii -> {116, 101, 115, 116}

String(byte bytes[], String charsetName)

byte[] ascii = {116, 101, 115, 116};String str = new String(ascii , "US-ASCII");// str -> "test"

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 22 / 28

Page 23: 2012 09 26_java_lecture03

Строки Регулярные выражения

Способ задания шаблонов строк для поиска и замены

Регулярные выражения поддерживаются в стандартнойбиблиотеке Javaboolean matches(String regex)

String[] split(String regex)

String replaceAll(String regex, String replacement)

String replaceFirst(String regex, String replacement)

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 23 / 28

Page 24: 2012 09 26_java_lecture03

Строки Регулярные выражения

Язык регулярных выражений

x конкретный символ[a-z] диапазон символов[ˆa-z] любой символ вне диапазона. любой символre+ одно или более повторенийre* ноль или более повторенийre? ноль или одно повторение(re) группировкаre1|re2 выбор

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 24 / 28

Page 25: 2012 09 26_java_lecture03

Строки Регулярные выражения

Пример

String str = "a, b, c,d, e";String [] items = str.split(", *");

// str.split (",[\t ]*");// str.split ("\\s*,\\s*");

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 25 / 28

Page 26: 2012 09 26_java_lecture03

Строки Регулярные выражения

Пример

String str = "abracadabra";String regex = "(ab|ac|ad|r.?)+";

// str.matches(regex) -> true

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 26 / 28

Page 27: 2012 09 26_java_lecture03

Строки Регулярные выражения

Пример

String str = "(aa)(bb)(cccc)";String regex = "\\(([^)]*)\\)";String result = str.replaceAll(regex , "$1");// result -> "aabbcccc"

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 27 / 28

Page 28: 2012 09 26_java_lecture03

Что сегодня узнали

Как создавать и использовать массивы

Как создавать и использовать строки

Как конвертировать строки из одной кодировки в другую

Что такое регулярные выражения и какие задачи можно решать сих помощью

Алексей Владыкин Массивы и строки в Java 26 сентября 2012 28 / 28