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



1- Иерархическое наследование

 Java интерфейс
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 - 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 of demo индекс
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 - команда
 демо версия
java - джава - учиться java - учебник java -
демо версия
- примеры java - java-программы

Related Searches to Руководство Java String, StringBuffer и StringBuilder