СТРОКИ Работа со строками
Последовательность выполнения операторов int age = 45; String s = "Не is " + age + " years old."; age не String, а переменная типа int. Нужно быть внимательными при совместном использовании целых выражений и слияния строк, в противном случае результат может получиться совсем не тот, который вы ждали. Результат: Не is 45 years old.
String s = "four: " ; four: 22. Для того, чтобы первым выполнилось сложение целых чисел, нужно использовать скобки : String s = "four : " + (2 + 2);
Извлечение символов Для того, чтобы извлечь одиночный символ из строки, вы можете сослаться непосредственно на индекс символа в строке с помощью метода charAt. Если вы хотите в один прием извлечь несколько символов, можете воспользоваться методом getChars.
Извлечение массива символов из объекта типа String. String s = "This is a demo of the getChars method."; int start = 10; int end = 14; char buf[] = new char[end - start]; s.getChars(start, end, buf, 0); System.out.println(buf); Результат : demo
Сравнение Если вы хотите узнать, одинаковы ли две строки, вам следует воспользоваться методом equals класса String. Альтернативная форма этого метода называется equalsIgnoreCase, при ее использовании различие регистров букв в сравнении не учитывается.
Пример : String s1 = "Hello"; String s2 = "Hello"; String s3 = "Good-bye"; String s4 = "HELLO"; System.out.println(s1 + " equals " + s2 + " -> " + s1.equals(s2)); System.out.println(s1 + " equals " + s3 + " -> " + s1.equals(s3)); System.out.println(s1 + " equals " + s4 + " -> " + s1.equals(s4)); System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> " + s1.equalsIgnoreCase(s4));
Результат : Hello equals Hello -> true Hello equals Good-bye -> false Hello equals HELLO -> false Hello equalsIgnoreCase HELLO -> true
Равенство Метод equals и оператор == выполняют две совершенно различных проверки. Если метод equal сравнивает символы внутри строк, то оператор == сравнивает две переменные ссылки на объекты и проверяет, указывают ли они на разные объекты или на один и тот же.
Пример : String s1 = "Hello"; String s2 = new String(s1); System.out.println(s1 + "equals"+s2+ " -> " + s1.equals(s2)); System.out.println(s1 + " == " + s2 + ", -> " + (s1 == s2));
Резльтат : Hello equals Hello -> true Hello == Hello -> false
indexOf и lastIndexOf В класс String включена поддержка поиска определенного символа, для этого в нем имеются два метода indexOf и lastIndexOf. Каждый из этих методов возвращает индекс того символа, который вы хотели найти. В любом случае, если поиск оказался неудачным методы возвращают значение -1.
Пример : String s = "Now is the time for all good men" + "to come to the aid of their country " + "and pay their due taxes."; System.out.println(s); System.out.println("indexOf(t) = " + s.indexOf(t)); System.out.println("lastlndexOf(t) = " + s.lastlndexOf(t));
System.out.println("indexOf(the) = " + s.indexOf("the")); System.out.println("lastlndexOf(the) = " + s.lastlndexOf("the")); System.out.println("indexOf(t, 10)="+ s.indexOf(t, 10)); System.out.println("lastlndexOf(t, 50) = " + s.lastlndexOf('f, 50)); System.out.println("indexOf(the, 10) = " + s.indexOf("the", 10)); System.out.println("lastlndexOf(the, 50) = " + s.lastlndexOf("the", 50));
Результат : Now is the time for all good men to come to the aid of their country and pay their due taxes. indexOf (t) = 7 lastlndexOf (t) = 87 indexOf (the) = 7 lastlndexOf (the) = 77 Index0f (t, 10) = 11 Lastlndex0f (t, 50) = 44 Index0f (the, 10) = 44
Модификация строк при копировании Поскольку объекты класса String нельзя изменять, всякий раз, когда вам захочется модифицировать строку, придется либо копировать ее в объект типа StringBuffer, либо использовать один из методов класса String, которые создают новую копию строки, внося в нее ваши изменения.
substring Вы можете извлечь подстроку из объекта String, используя метод substring. Этот метод создает новую копию символов из того диапазона индексов строки, который вы указали при вызове. Можно указать только индекс первого символа нужной подстроки тогда будут скопированы все символы, начиная с указанного и до конца строки.
Также можно указать и начальный, и конечный индексы при этом в новую строку будут скопированы все символы, начиная с первого указанного, и до (но не включая его) символа, заданного конечным индексом. "Hello World".substring(6) -> "World" "Hello World".substring(3,8) -> "lo Wo"
concat Слияние, или конкатенация строк выполняется с помощью метода concat. Этот метод создает новый объект String, копируя в него содержимое исходной строки и добавляя в ее конец строку, указанную в параметре метода. "Hello".concat(" World") -> "Hello World"
replace Методу replace в качестве параметров задаются два символа. Все символы, совпадающие с первым, заменяются в новой копии строки на второй символ. "Hello".replace('l', 'w') -> "Hewwo"
toLowerCase и toUpperCase Эта пара методов преобразует все символы исходной строки в нижний и верхний регистр, соответственно. "Hello".toLowerCase() -> "hello" "Hello".toUpperCase() -> "HELLO"
trim Mетод trim убирает из исходной строки все ведущие и замыкающие пробелы. Hello World.trim() -> "Hello World"
StringBuffer StringBuffer близнец класса String, предоставляющий многое из того, что обычно требуется при работе со строками. Объекты класса String представляют собой строки фиксированной длины, которые нельзя изменять. Объекты типа StringBuffer представляют собой последовательности символов, которые могут расширяться и модифицироваться
Текущую длину StringBuffer можно определить, вызвав метод length, а для определения всего места, зарезервированного под строку в объекте StringBuffer нужно воспользоваться методом capacity.
Пример : StringBuffer sb = new StringBuffer("Hello"); System.out.println("buffer = " + sb); System.out.println("length = " + sb.length()); System.out. println("capacity = " + sb.capacity()); Результат : buffer = Hello length = 5 capacity = 21
setLength Если вам вдруг понадобится в явном виде установить длину строки в буфере, воспользуйтесь методом setLength. Если вы зададите значение, большее чем длина содержащейся в объекте строки, этот метод заполнит конец новой, расширенной строки символами с кодом нуль.
charAt и setCharAt Одиночный символ может быть извлечен из объекта StringBuffer с помощью метода charAt. Другой метод setCharAt позволяет записать в заданную позицию строки нужный символ.
Пример : StringBuffer sb = new StringBuffer("Hello"); System.out.println("buffer before = " + sb); System.out.println("charAt(1) before = " + sb.charAt(1)); sb.setCharAt(1, 'i'); sb.setLength(2); System.out.println("buffer after = " + sb); System.out.println("charAt(1) after = " + sb.charAt(1));
Результат : buffer before = Hello charAt(1) before = e buffer after = Hi charAt(1) after = i