String str = "Hello Java!";Большая часть информации, которая используется в программном обеспечении является текстовой.
Как работать с текстом в Java?
Use class String
StringStringString из пакета java.lang
String immutable (неизменяемый)
immutable значит, что после его создания он (и его содержимое) не может изменяться.
String str = "Hello Java!";String objects?String str1 = "Java";
String str2 = new String();
String str3 = new String("JVM");
String str4 = new String(new char[] {'h', 'e', 'l', 'l', 'o'});
String str5 = new String(
new char[] {'w', 'e', 'l', 'c', 'o', 'm', 'e'}, 3, 4);
System.out.println(str1); // 'Java'
System.out.println(str2); // ''
System.out.println(str3); // 'JVM'
System.out.println(str4); // 'hello'
System.out.println(str5); // 'come'+ for stringsДля объектов и литералов типа String определена одна операция + (конкатенация), которая объединяет
две строки.
String str1 = "Hello";
String str2 = "Java";
String str3 = str1 + " " + str2;
System.out.println(str3);Hello Java
String: main methodslength(): intString str1 = "Java";
System.out.println(str1.length());4
toCharArray(): char[]String str1 = new String(new char[] {'h', 'e', 'l', 'l', 'o'});
char[] helloArray = str1.toCharArray();String s = null; // строка не указывает на объект
if (s.length() == 0) {
System.out.println("String is empty");
}String s = null; // строка не указывает на объект
if (s.length() == 0) { // null.length() - `NullPointerException`
System.out.println("String is empty");
}isEmpty(): booleanpublic boolean isEmpty() {
return value.length == 0;
}String s = null; // строка не указывает на объект
if (s.isEmpty()) { // null.length() - `NullPointerException`
System.out.println("String is empty");
}String s = null; // строка не указывает на объект
if (s != null && s.isEmpty()) {
System.out.println("String is empty or null");
}String is empty or null
concat(String): StringString str1 = "Java";
String str2 = "Hello";
str2 = str2.concat(str1);HelloJava
join(CharSequence, CharSequence…): StringString str1 = "Java";
String str2 = "Hello";
String str3 = String.join(" ", str2, str1);Hello Java
charAt(int): charString str = "Java";
char c = str.charAt(2);
System.out.println(c);v
getChars(int, int, char[], int): voidString str = "Hello world!";
int sourceBegin = 6;
int sourceEnd = 11;
char[] target = new char[sourceEnd - sourceBegin];
int targetBegin = 0;
str.getChars(sourceBegin, sourceEnd, target, targetBegin);
System.out.println(target);world
equals(Object): booleanString str1 = "Hello";
String str2 = "hello";
System.out.println(str1.equals(str2));false
equalsIgnoreCase(Object): booleanString str1 = "Hello";
String str2 = "hello";
System.out.println(str1.equalsIgnoreCase(str2));true
regionMatches(int, String, int, int): booleanregionMatches(int toffset, String other, int oofset, int len): boolean
regionMatches(boolean ignoreCase, int toffset, String other, int oofset, int): booleanregionMatches(int, String, int, int): booleanString str1 = "Hello world";
String str2 = "I work";
boolean result = str1.regionMatches(6, str2, 2, 3);
System.out.println(result);true
compareTo(String): int и compareToIgnoreCase(String): intString str1 = "hello";
String str2 = "world";
String str3 = "hell";
String str4 = "helln";
System.out.println(str1.compareTo(str2));
System.out.println(str1.compareTo(str3));
System.out.println(str1.compareTo(str4));-15 // str1 меньше чем strt2 так находится на 15 символов ближе к началу отсчета 1 // str1 больше чем str3 по количеству символов 1 // str1 больше чем str4 так находится на 1 символов дальше к началу отсчета
indexOf(String): int и lastIndexOf(String): intString str = "Hello world";
int index1 = str.indexOf('l');
int index2 = str.indexOf("wo");
int index3 = str.lastIndexOf('l');2 6 9
startsWith(String): boolean и endsWith(String): booleanString str = "myfile.exe";
boolean start = str.startsWith("my");
boolean end = str.endsWith("exe");true true
replace(CharSequence, CharSequence)String str = "Hello world";
String replStr1 = str.replace('l', 'd');
String replStr2 = str.replace("Hello", "Bye");Heddo wordd Bye world
trim(): StringString str = " hello world ";
str = str.trim();hello world
substring(int): String and substring(int, int): StringString str = "Hello world";
String substr1 = str.substring(6);
String substr2 = str.substring(3,5);world lo
toLowerCase(): String и toUpperCase(): StringString str = "Hello World";
System.out.println(str.toLowerCase());
System.out.println(str.toUpperCase());hello world HELLO WORLD
split(String): String[] and split(String, int): String[]String text = "FIFA will never regret it";
String[] words = text.split(" ");
for (String word : words) {
System.out.println(word);
}FIFA will never regret it
String Pool (Пул строк) — это набор строк, который хранится в Heap.

ЕСЛИ String создается через оператор new, ТО она не помещается в String Pool.
ЕСЛИ ее необходимо поместить в String Pool, ТО используется метод intern().
String s1 = "Rick";
// s1 in String Pool
String s2 = "Rick";
// s2 in String Pool: s1 vs. s2 - the same object
String s3 = new String("Rick");
// s3 in Heap: s3 vs. s1, s2 - different objects
String s4 = new String("Rick");
// s4 in Heap: s4 vs. s3 vs. s1, s2 - different objects
String s5 = s4.intern();
// s5 is s4 moved to String Poll: s5 vs. s1, s2 - the same objectStringBuffer и StringBuilderStringКласс String immutable (не изменяемый).
Еще раз: он immutable
Он реально immutable!
String str = "Hello";
str += " Java";Код приведенный выше, приводит к тому, что создается новый объект, и содержимое обеих исходных строк в него копируется.
StringBuffer и StringBuilderЕсли класс String immutable, то что делать когда нужно часто изменять строку?
Каждый раз при изменении строки, создается новая и под нее выделяется память.
Эту проблему решают объекты типа: StringBuilder и StringBuffer
Оба класса позволяют менять содержимое находящихся в них строк.
При этом они не потребляют лишнюю память.
String str = "Hello";
StringBuilder strBuilder = new StringBuilder(str);
strBuilder.append(" Java");StringBuffer и StringBuilderКласс StringBuilder - NOT thread safe (потоко-НЕбезопасный), но быстрый
Класс StringBuffer - thread safe (потоко-безопасный), но медленный
StringBuffer constructorsStringBuffer()
StringBuffer(int capacity)
StringBuffer(String str)
StringBuffer(CharSequence chars)
StringBuilder constructorsStringBuilder()
StringBuilder(int capacity)
StringBuilder(String str)
StringBuilder(CharSequence chars)
StringBuffer и StringBuilderString str = "Java";
StringBuffer strBuffer = new StringBuffer(str); // capacity = 16 + str.length()
System.out.println("Length: " + strBuffer.length());
System.out.println("Capacity: " + strBuffer.capacity());
strBuffer.ensureCapacity(32);
// If the current capacity is less than the argument ->
// newCapacity = 2 * oldCapacity + 2
System.out.println("Capacity: " + strBuffer.capacity());Length: 4
Capacity: 20
Capacity: 42charAt(int): char и setCharAt(int, char): voidStringBuffer strBuffer = new StringBuffer("Java");
char c = strBuffer.charAt(0);
System.out.println(c);J
strBuffer.setCharAt(0, 'c');
System.out.println(strBuffer.toString());cava
getChars(int, int, char[], int): voidStringBuffer strBuffer = new StringBuffer("world");
int startIndex = 1;
int endIndex = 4;
char[] buffer = new char[endIndex - startIndex];
strBuffer.getChars(startIndex, endIndex, buffer, 0);
System.out.println(buffer);orl
append(*): StringBufferStringBuffer strBuffer = new StringBuffer("hello");
strBuffer.append(" world");
System.out.println(strBuffer.toString());hello world
insert(int, *): StringBufferStringBuffer strBuffer = new StringBuffer("word");
strBuffer.insert(3, 'l');
System.out.println(strBuffer.toString());
strBuffer.insert(0, "s");
System.out.println(strBuffer.toString());world sworld
delete(int, int): StringBuffer и deleteCharAt(int): StringBufferStringBuffer strBuffer = new StringBuffer("assembler");
strBuffer.delete(0, 2);
System.out.println(strBuffer.toString());
strBuffer.deleteCharAt(6);
System.out.println(strBuffer.toString());sembler semble
substring(int): String и substring(int, int): StringStringBuffer strBuffer = new StringBuffer("hello java!");
String str1 = strBuffer.substring(6); // обрезка строки с 6 символа до конца
System.out.println(str1);
String str2 = strBuffer.substring(3, 9); // обрезка строки с 3 по 9 символ
System.out.println(str2);java! lo jav
setLength(int): voidStringBuffer strBuffer = new StringBuffer("hello");
strBuffer.setLength(10);
System.out.println(strBuffer.toString() + "'");
strBuffer.setLength(4);
System.out.println(strBuffer.toString());hello ' hell
replace(int, int, String): StringBufferStringBuffer strBuffer = new StringBuffer("hello world!");
strBuffer.replace(6, 11, "java");
System.out.println(strBuffer.toString());hello java!
reverse(): StringBufferStringBuffer strBuffer = new StringBuffer("assembler");
strBuffer.reverse();
System.out.println(strBuffer.toString());relbmessa