java tutorial - Руководство Java String, StringBuffer и StringBuilder - учебник java - java programming - учиться java - java basics - java for beginners
1- Иерархическое наследование

java - джава - учиться java - учебник java -
Java интерфейс
- примеры java - java-программы
- При работе с текстовым данными, Java предоставляет вам 3 класса String, StringBuffer и StringBuilder. При работе с большими данными вам стоит использовать StringBuffer или StringBuilder чтобы достичь лучшую эффективность. Стандартно эти 3 класса имеют много общего.
- String не изменяется (immutable), это понятие будет детально описано в статье. Он не позволяет иметь подкласс.
- StringBuffer, StringBuilder могут быть изменены (mutable)
- StringBuilder и StringBuffer похожи, лишь отличаются в ситуациях связанные с использованием многопоточности (Multi Thread).
- При обработке тектса со многими потоками(Thread) вам следует использовать StringBuffer, чтобы предотвратить конфликт между потоками.
- При обработке текста с одним потоком стоит использовать StringBuilder.
- Если сравнить скорость обработки, то самый лучший это StringBuilder, затем идет StringBuffer и последний это String.
2- Понятия изменяемые & неизменяемые
- Посмотрим иллюстрированный пример:
// This is a class with value field and name field.
// When you create this class, you cannot reset the value and all other fields from outside.
// This class does not have methods for the purpose of resetting fields from outside.
// It means this class is immutable
public class ImmutableClassExample {
private int value;
private String name;
public ImmutableClassExample(String name, int value) {
this.value = value;
this.name= name;
}
public String getName() {
return name;
}
public int getValue() {
return value;
}
}
// This is a class owning a value field.
// After creating the object, you can reset values of the value field by calling setNewValue(int) method.
// This is a mutable class.
public class MutableClassExample {
private int value;
public MutableClassExample(int value) {
this.value= value;
}
public void setNewValue(int newValue) {
this.value = newValue;
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- String это неизменяемый класс, String имеет разные свойства (поля), например length,... го эти значения не могут быть изменены.
3- String
- String это очень важный класс в Java, и любой кто начинает с Java использует команду System.out.println() чтобы распечатать String на экран Console. Многие обычно не знают что String является неизменным ( immutable) и финальным (Не позволяет классу наследовать его), все изменения в String создают другой объект String.
3.1- String is a very special class
- В java, String это особенный класс, причиной является то, что он используется постоянно в программе, поэтому он трребует производительность и гибкость. Это причина, почему String имеет свойства объекта и примитивный вид (primitive).
Примитивный вид:
- Вы можете создать string literal (строковый литерал), string literal хранится в стеке (stack), требует пространство хранения, и дешевле при обработке.
- String literal = "Hello World";
- Вы можете использовать оператор + чтобы соединить 2 string, этот оператор уже знаком и используется для данных примитивного вида как int, float, double.
- String literal хранятся в общем пуле (common pool). Так два string literal имеют похожее содержание, используют общее место в памяти в стеке, это помогает сэкономить память.
Свойство объекта:
- Так как String является классом, он может быть создан используя оператор new.
- String object = new String("Hello World");
- Объекты String хранятся в Heap, требует управление сложности и стоимости пространства хранения в памяти. Два объекта String с одинаковым содержанием хранаятся на 2 разных областях в Heap.
- Например:
// Implicit construction via string literal
String str1 = "Java is Hot";
// Explicit construction via new
String str2 = new String("I'm cool");
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда3.2- String Literal vs. String Object
- Как упомянуто, существует два способа построить строку (String): неявное строительство путем назначения строкового литерала ( String literal) или явно создать объект String через оператор new и составляющие String. Например,
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- Мы объясним, исопльзуя иллюстрации ниже:
- Мы объясним, исопльзуя иллюстрации ниже:
- String literal с одинаковым содержанием, они разделят одно место хранения в общем пуле ( common pool). При этом объекты String хранятся в Heap, и не разделяют место хранения включая эти 2 объекта string с одинаковым содержанием.
- equals() vs ==
- Метод equals() используется для сравнения 2-х объектов, с String это означает сравнение содержания 2-х string. Для ссылочных видов (reference), оператор == значит сравнение адреса области хранения объекта. Посмотрим пример:
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object
s1 == s1; // true, same pointer
s1 == s2; // true, s1 and s2 share storage in common pool
s1 == s3; // true, s3 is assigned same pointer as s1
s1 == s4; // false, different pointers
s4 == s5; // false, different pointers in heap
s1.equals(s3); // true, same contents
s1.equals(s4); // true, same contents
s4.equals(s5); // true, same contents
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- На самом деле, вам следует использовать String literal, вместо оператора new. Это ускоряет вашу программу.
3.3- The methods of the String
- Далее идет список методов String.
3.3.1- length()
package org.wikitechy.tutorial.str;
public class LengthDemo {
public static void main(String[] args) {
String str = "This is text";
int len = str.length();
System.out.println("String Length is : " + len);
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- Результаты запуска примера:

java - джава - учиться java - учебник java -
Продолжительность демо
- примеры java - java-программы
3.3.2- concat(String)
package org.wikitechy.tutorial.str;
public class ConcatDemo {
public static void main(String[] args) {
String s1 = "One";
String s2 = "Two";
String s3 = "Three";
// s1.concat(s2) same as s1 + s2
String s = s1.concat(s2);
System.out.println("s1.concat(s2) = " + s);
// s1.concat(s2).concat(s3) same as s1 + s2 + s3;
s = s1.concat(s2).concat(s3);
System.out.println("s1.concat(s2).concat(s3) = " + s);
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- Результаты запуска примера:

java - джава - учиться java - учебник java -
связаться демо
- примеры java - java-программы
3.3.3- indexOf(..)

java - джава - учиться java - учебник java -
Java-индекс демо
- примеры java - java-программы
IndexOfDemo.java
package org.wikitechy.tutorial.str;
public class IndexOfDemo {
public static void main(String[] args) {
String str = "This is text";
// Find index within this string of the first occurrence 'i'.
// ==> 2
int idx = str.indexOf('i');
System.out.println("- indexOf('i') = " + idx);
// Find index within this string of the first occurrence 'i'
// starting the search at index 4.
// ==> 5
idx = str.indexOf('i', 4);
System.out.println("- indexOf('i',4) = " + idx);
// index within this string of the first occurrence of "te".
// ==> 8
idx = str.indexOf("te");
System.out.println("- indexOf('te') = " + idx);
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- Результаты запуска примера:
3.3.4- substring(..)

java - джава - учиться java - учебник java -
Java of demo индекс
- примеры java - java-программы
SubstringDemo.java
package org.wikitechy.tutorial.str;
public class SubstringDemo {
public static void main(String[] args) {
String str = "This is text";
// Returns the substring from index 3 to the end of string.
String substr = str.substring(3);
System.out.println("- substring(3)=" + substr);
// Returns the substring from index 2 to index 7.
substr = str.substring(2, 7);
System.out.println("- substring(2, 7) =" + substr);
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- Результаты запуска примера:

java - джава - учиться java - учебник java -
подстрока демо
- примеры java - java-программы
3.3.5- replace
- Some methods relating to replace.
// Returns a new string resulting from replacing all occurrences of
// oldChar in this string with newChar.
public String replace(char oldChar, char newChar)
// Replaces each substring of this string that matches the given
// 'regular expression' with the given replacement.
public String replaceAll(String regex, String replacement)
// Replaces the first substring of this string that matches
// the given <'regular expression' with the given replacement.
public String replaceFirst(String regex, String replacement)
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - командаReplaceDemo.java
package org.wikitechy.tutorial.str;
public class ReplaceDemo {
public static void main(String[] args) {
String str = "This is text";
// Replace the character 'i' by 'x'.
String s2 = str.replace('i', 'x');
System.out.println("- s2=" + s2);
// Replace all the strings match "is" by "abc". (Regular Expression)
String s3 = str.replaceAll("is", "abc");
System.out.println("- s3=" + s3);
// Replaces the first substring of this string that matches "is" by "abc".
String s4 = str.replaceFirst("is", "abc");
System.out.println("- s4=" + s4);
// (See also document the regular expression)
// Replace all substring matching expression:
// "is|te": means "is" or "te" replaced by "+".
String s5 = str.replaceAll("is|te", "+");
System.out.println("- s5=" + s5);
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- Результаты запуска примера:

java - джава - учиться java - учебник java -
заменить демо
- примеры java - java-программы
3.3.6- Другие примеры:
package org.wikitechy.tutorial.str;
public class StringOtherDemo {
public static void main(String[] args) {
String str = "This is text";
System.out.println("- str=" + str);
// Return lower case string.
String s2 = str.toLowerCase();
System.out.println("- s2=" + s2);
// Return upper case string
String s3 = str.toUpperCase();
System.out.println("- s3=" + s3);
// Check string started by "This" or not.
boolean swith = str.startsWith("This");
System.out.println("- 'str' startsWith This ? " + swith);
// A string with whitespace in beginning and end.
// Note: \t is tab character
// \n is new line character
str = " \t Java is hot! \t \n ";
System.out.println("- str=" + str);
// Returns a copy of the string, with leading and trailing whitespace omitted.
String s4 = str.trim();
System.out.println("- s4=" + s4);
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда- Результаты запуска примера:

java - джава - учиться java - учебник java -
строка другая демонстрация
- примеры java - java-программы
4- StringBuffer vs StringBuilder
- StringBuilder и StringBuffer очень похожи, отличие в том, что все методы StringBuffer синхронизированы, он подходит, когда вы работаете с многопоточным приложением, несколько потоков могут одновременно иметь доступ в объект StringBuffer. В это време, StringBuilder имеет похожие методы но не синхронизированы, но его производительность выше. Вам следует использовать StringBuilder в однопоточном приложении, или использовать как локальную переменную в методе.
Методы StringBuffer (StringBuilder индентичны)
// Constructors
StringBuffer() // an initially-empty StringBuffer
StringBuffer(int size) // with the specified initial size
StringBuffer(String s) // with the specified initial content
// Length
int length()
// Methods for building up the content
// type could be primitives, char[], String, StringBuffer, etc
StringBuffer append(type arg) // ==> note above!
StringBuffer insert(int offset, type arg) // ==> note above!
// Methods for manipulating the content
StringBuffer delete(int start, int end)
StringBuffer deleteCharAt(int index)
void setLength(int newSize)
void setCharAt(int index, char newChar)
StringBuffer replace(int start, int end, String s)
StringBuffer reverse()
// Methods for extracting whole/part of the content
char charAt(int index)
String substring(int start)
String substring(int start, int end)
String toString()
// Methods for searching
int indexOf(String searchKey)
int indexOf(String searchKey, int fromIndex)
int lastIndexOf(String searchKey)
int lastIndexOf(String searchKey, int fromIndex)
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
java - джава - учиться java - учебник java -
построитель строк
- примеры java - java-программы
StringBuilderDemo.java
package org.wikitechy.tutorial.strbb;
public class StringBuilderDemo {
public static void main(String[] args) {
// Create StringBuilder object
// with no characters in it and
// an initial capacity specified by the capacity argument
StringBuilder sb = new StringBuilder(10);
// Append the string Hello ... on sb.
sb.append("Hello...");
System.out.println("- sb after appends a string: " + sb);
// append a character
char c = '!';
sb.append(c);
System.out.println("- sb after appending a char: " + sb);
// Insert a string at index 5
sb.insert(8, " Java");
System.out.println("- sb after insert string: " + sb);
// Delete substring at index 5 to 8
sb.delete(5,8);
System.out.println("- sb after delete: " + sb);
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда