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

java-lekcii-2016-01-17 / presentation-oct-17

.docx
Скачиваний:
14
Добавлен:
27.03.2016
Размер:
28.89 Кб
Скачать

java.lang.String

Класс String используется в Java для работы со строками, т.е. последовательностями символов. Фактически класс является оберткой массива символов (char[]).

Работа со строками

package ru.mami;

public final class StringExercises {

public static void main(String[] args) {

// Объявление строки

String line;

// Задание значения

line = "The quick brown fox jumps over the lazy dog";

// Объявление и задание значения одной строкой

String newLine = "The quick brown fox jumps over the lazy dog";

// Объединение строк

String concLine = "The quick" + " brown fox";

System.out.println(concLine); // The quick brown fox

// Получение длины строки

int length = line.length();

System.out.println(length); // 43

// Поиск подстроки в строке

int index = line.indexOf("quick");

System.out.println(index); // 4

// Получение части строки с определенной позиции и до конца строки

String subLine = line.substring(20);

System.out.println(subLine); // jumps over the lazy dog

// Получение части строки с определенной позиции до другой позиции

subLine = line.substring(20, 25);

System.out.println(subLine); // jumps

// Получение символа, стоящего на определенной позиции

char character = line.charAt(20);

System.out.println(character); // j

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

// !!! Для сравнения строк нельзя использовать ==

boolean linesEqual = line.equals(newLine);

System.out.println(linesEqual); // true

// Дополнительная информация

// https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

}

}

Методы

Метод – группа выражений, объединенных для выполнения какой-либо операции.

Объявление метода

package ru.mami;

import java.util.Arrays;

public final class StringExercises {

public static void main(String[] args) {

int[] ints = { 1, 2, 3, 4 };

// Использование метода printIntArray

printIntArray(ints); // [1, 2, 3, 4]

// Использование метода sumElement

System.out.println(sumElements(ints)); // 10

}

//

// Модификатор видимости

// || Принадлежит ли конкретному объекту класса

// || || Тип возвращаемого значения (void = не возвращает ничего)

// || || || Название метода

// || || || || Принимаемые параметры

// || || || || ||

// \/ \/ \/ \/ \/

private static void printIntArray(int[] array) {

System.out.println(Arrays.toString(array));

}

private static int sumElements(int[] array) {

int result = 0;

for (int current : array) {

result += current;

}

// Выход из функции и возврат определенного значения в место вызова

// метода. Операторов return может быть несколько (они также могут

// отсутствовать, тогда выход из метода происходит после выполнения

// последней строки метода) и они могут встречаться в теле метода

// где угодно.

return result;

}

}

Примеры

Пример 1 (предыдущая лабораторная)

Условие

Имея массив целых чисел numbers и цифру digitSought, найти хотя бы один элемент массива, содержащий эту цифру. Поиск проводить только в четных элементах.

Например, для массива {13, -45, 42, 18} и цифры 4 нужно вывести «Цифра 4 содержится в числе 42», так как число -45 нечетное.

Для массива {13, -45, 42, 18} и цифры 3 нужно вывести «Соответствующий условию элемент массива найти не удалось», так как она не содержится в четных элементах массива.

Решение с использованием методов

package ru.mami;

public final class StringExercises {

public static void main(String[] args) {

int[] numbers = { -12, 33, -43, -47, 84, 90, 67 };

int digitSought = 4;

boolean digitFound = false;

for (int numberCurrent : numbers) {

if (numberFits(numberCurrent, digitSought)) {

System.out.println("Цифра " + digitSought

+ " содержится в числе " + numberCurrent);

digitFound = true;

break;

}

}

if (!digitFound) {

System.out.println(

"Соответствующий условию элемент массива найти не удалось");

}

}

private static boolean numberFits(int number, int digit) {

if (!numberIsEven(number)) {

return false;

}

if (!numberContainsDigit(number, digit)) {

return false;

}

return true;

}

private static boolean numberIsEven(int number) {

return number % 2 == 0;

}

private static boolean numberContainsDigit(int number, int digit) {

number = Math.abs(number);

while (number != 0) {

int remainder = number % 10;

if (remainder == digit) {

return true;

}

number /= 10;

}

return false;

}

}

Пример 2

Условие

Написать метод, который принимает имя в виде строки (например, "Bob") и выводит приветствие на экран (например, "Hello Bob!"). 

Решение

package ru.mami;

public final class StringExercises {

public static void main(String[] args) {

greet("Mike");

}

private static void greet(String name) {

String greeting = "Hello " + name + "!";

System.out.println(greeting);

}

}

Пример 3

Условие

Написать метод, который получает строку и выводит ее на экран, удваивая все символы (“Hey” -> “HHeeyy”).

Решение

package ru.mami;

public final class StringExercises {

public static void main(String[] args) {

doubleChars("Mike");

}

private static void doubleChars(String text) {

multiplyChars(text, 2);

}

private static void multiplyChars(String text, int multiplier) {

for (int i = 0; i < text.length(); ++i) {

char current = text.charAt(i);

for (int j = 0; j < multiplier; ++j) {

System.out.print(current);

}

}

}

}

Пример 4

Условие

Написать метод, который получает строку и возвращает количество слов, оканчивающихся на ‘y’ или ‘z’. Слова разделены символами, которые не являются буквами. Для проверки, является ли символ буквой, использовать метод класса Character isLetter().

Решение

package ru.mami;

public final class StringExercises {

public static void main(String[] args) {

int count = countYZ("foo bar baz");

System.out.println(count);

}

private static int countYZ(String text) {

int result = 0;

int indexCurrent = 0;

while (indexCurrent < text.length()) {

char charCurrent = text.charAt(indexCurrent);

if (charCurrent == 'y' || charCurrent == 'z') {

int indexNext = indexCurrent + 1;

if (indexNext >= text.length()

|| !Character.isLetter(text.charAt(indexNext))) {

++result;

}

}

++indexCurrent;

}

return result;

}

}

Упражнения

Все упражнения предполагают создание как минимум одного метода. В методе main может происходить только вызов других методов и вывод результата на экран, если по условию задачи нужно вернуть результат, а не вывести его на экран.

Easy

  • Получив строку длиной 4 символа и слово вернуть новую строку, в которой слово стоит в середине первой строки ("<<>>", "Yay" => "<<Yay>>").

  • Получив строку четной длины, вернуть первую ее половину (“WooHoo” => “Woo”).

  • Получив строку и переменную типа boolean, вернуть в виде новой строки первый символ исходной строки, если значение переменной – true, и последний в противоположном случае (“Hello”, true => “H” | “Hello”, false => “o”).

  • Получив строку, вернуть true, если она оканчивается на “ly” (“Oddly” => true | “y” => false).

  • Получив строку нечетной длины, вернуть в качестве новой строки три средних символа. Исходная строка не может быть короче 3 символов (“Candy” => “and”).

Medium

  • Получить строку и подсчитать, сколько раз в ней встречается слово “code”. Вместо ‘d’ может быть любой символ, т.е. слова “cope” и “cooe” тоже считаются (“codeqcopedcoxe” => 3).

  • Получив строку и целое число N, вернуть новую строку, содержащую N последних символов оригинальной строки, повторенных N раз (“Hello”, 3 => “llollollo”). N может принимать значения от 0 включительно до длины исходной строки.

  • Получив строку и целое число N, вернуть true, если подстрока, состоящая из первых N символов строки, присутствует в строке где-то еще (“assassin”, 3 => true | “ssss”, 3 => true | “hello”, 2 => false).

  • Получив строку, вернуть true, если для каждого символа ‘*’ символы, идущие сразу перед и после него отсутствуют или одинаковы (“y*y” => true | “asdf*” => true | “*” => true | “a*s*s” => false).

  • Получив строку, вернуть true, если в середине строки присутствует подстрока “xyz”. “В середине” означает, что количество символов справа и слева он “xyz” отличается не больше чем на 1 (“AAxyzBB” => true | “AxyzBB” => ture | “AxyzBBB” => false).

Hard

  • Получив строку, вернуть наиболее длинную подстроку, присутствующую в начале и в конце исходной строки. Пересечения не учитывать (“abXab” => “ab” | “xx” => “x” | “xxx” => “x”).

  • Получив строку, вернуть сумму всех чисел в этой строке. Под числом подразумевается несколько цифр, идущих подряд. Для проверки, является ли символ цифрой, можно использовать метод Character.isDigit(), для преобразования строки в число – Integer.parseInt(). (“12s4” => 16)

  • Получив строку, вернуть самую длинную подстроку, присутствующую в начале строки и в конце строки в обратной последовательность. Пересечения возможны (“abXYZba” => “ab” | “zxyxz” => “zxyxz” | “zy” => “”).

  • Получив строку, вернуть новую строку, в которой каждое встреченное в исходной строке “is”, перед и после которого не стоит другая буква (проверять при помощи Character.isLetter()), заменено на “is not” (“This is a test” => “This is not a test”).

  • Получив строку, вернуть длину самой большой группы одинаковых символов, стоящих на соседних позициях (“aassssddddf” => 4).

Соседние файлы в папке java-lekcii-2016-01-17