Привіт усім! Дана стаття присвячена вбудованому Java класу String. А себто його методам і конструкторам. Як відомо об'єкт класу String містить послідовність символів, яку не можна змінити після створення і ініціалізування примірника класу. Самі символи зберігаються у пам'яті у вигляді 16-бітних комірок в кодуванні UTF-16. Відповідно перші 128 значень символів відповідають схемі ASCII.

Конструктори класу String

В даній частині ми розглянемо як можна створювати і ініціалізовувати об'єкти класу String.
String ()
Ініціалізовує новостворений об'єкт String у пусте значення.
String (byte[] bytes)
Конструює новий об'єкт String, декодуючи вказаний масив байтів використовуючи стандартну схему кодування символів платформи.
String (byte[] bytes,
        Charset charset)
Конструює новий об'єкт String, декодуючи вказаний масив байтів використовуючи вказаний об'єкт кодування символів.
String (byte[] ascii, 
        int hibytes)
Застарілий конструктор. Він не правильно перетворює байти в символи. Використовуйте конструктор, який приймає параметром об'єкт Charset.
String (byte[] bytes, 
        int offset, 
        int length)
Конструює новий об'єкт String, декодуючи вказаний підмасив байтів з зміщенням offset від першого і кількістю length, за допомогою стандартної схеми кодування платформи.
String (byte[] bytes, 
        int offset, 
        int length, 
        Charset charset)
Конструює новий об'єкт String, декодуючи вказаний підмасив байтів з зміщенням offset від першого і кількістю length, за допомогою вказаного об'єкту Charset.
String (byte[] ascii, 
        int hibyte, 
        int offset, 
        int count)
Застарілий конструктор. Використовуйте конструктор, який приймає параметром об'єкт Charset.
String (byte[] bytes, 
        int offset, 
        int length, 
        String charsetName)
Конструює новий об'єкт String, декодуючи підмасив байтів з зміщенням offset і довжиною length, за допомогою вказаної системи кодування.
String (byte[] bytes, 
        String charsetName)
Конструює новий об'єкт String, декодуючи масив байтів, за допомогою вказаної системи кодування.
String (char[] value)
Створює новий об'єкт String, який представляє послідовність символів взятих з переданого масиву символів.
String (char[] value, 
        int offset, 
        int count)
Створює новий об'єкт String, який представляє послідовність символів взятих з підмасиву переданого масиву символів, з зміщенням offset від першого і кількістю count.
String (int[] codePoints, 
        int offset, 
        int count)
Створює новий масив символів використовуючи значення підмасиву codePoints, які представляють собою точки кодів Unicode.
String (String original)
Конструктор копіювання — створює новий примірник класу String з скопійованим значенням аргумента конструктора.
String (StringBuffer buffer)
Створює новий об'єкт класу String, який містить послідовність символів таку ж як у переданого конструктору буфера символів.
String (StringBuilder builder)
Створює новий об'єкт класу String, який містить послідовність символів таку ж як у переданого конструктору конструктора рядків. Розглянемо приклади використання усіх вищевказаних конструкторів без використання застарілих.
/* import - команда підключення класів і пакетів  */ 
import java.io.* ; /* виключення системи кодувань */ 
import java.lang.* ; /* StringBuider */ 
import java.nio.charset.* ; /* базовий клас Charset 
                            ** стандартні кодування */ 

class MainClass 
{ 
  public static void main (String[] opts) 
  { 
    /* створюємо послідовність байтів 
    ** з кодами символів ASCII ('A', 'B', 'C', 'D', 'E') */ 
    byte[] chbytes = new byte[] {65, 66, 67, 68, 69} ; 
    /* масив символів */ 
    char[] chars = new char[] {'A', 'B', 'C', 'D', 'E'} ; 
    /* UTF-16 коди 'А', 'Б', 'В', 'Г' */ 
    int [] codePoints = new int [] {1040, 1041, 1042, 1043} ; 
    /* додаткові об'єкти */ 
    StringBuffer strbuff = new StringBuffer ("АБВГҐ") ; 
    StringBuilder strbuild = new StringBuilder ("АБВГҐД") ; 
    
    /* стандартний декодер байтів */
    Charset chset = StandardCharsets.US_ASCII ;
    
    /* Приклади створення примірників Java String */ 
    String defcon     = new String () ; 
    String bytecon    = new String (chbytes) ; 
    String byteconc   = new String (chbytes, chset) ; 
    String bytecons   = new String (chbytes, 1, 2) ; 
    String byteconsc  = new String (chbytes, 1, 2, chset) ; 
    String charcon    = new String (chars) ; 
    String charcons   = new String (chars, 1, 2) ; 
    String CPcons     = new String (codePoints, 0, 4) ; 
    String Copycon    = new String (CPcons) ; 
    String StrBuffcon = new String (strbuff) ; 
    String StrBuildcon= new String (strbuild) ; 

    String chname = "US-ASCII" ; 
    String byteconscn ; 
    String byteconn ; 
    /* для Charset в якості String 
    ** потрібно "ловити" виключення */ 
    try 
    { 
      byteconscn = new String (chbytes, 1, 2, chname) ; 
      byteconn= new String (chbytes, chname) ; 
    } 
    catch (UnsupportedEncodingException th) 
    { 
      System.out.println ("Не підтримувана система кодування символів: " + chname) ; 
      byteconn = byteconscn = "Unsupported charset!" ; 
    } 
    
    /* виводимо вміст кожної змінної у термінал */ 
    System.out.println ("Пустий           : " + defcon) ; 
    System.out.println ("Байти            : " + bytecon) ; 
    System.out.println ("Байти            : " + byteconc) ; 
    System.out.println ("Байти            : " + bytecons) ; 
    System.out.println ("Байти            : " + byteconsc) ; 
    System.out.println ("Байти            : " + byteconscn) ; 
    System.out.println ("Байти            : " + byteconn) ; 
    System.out.println ("Масив символів   : " + charcon) ; 
    System.out.println ("Підмасив символів: " + charcons) ; 
    System.out.println ("Коди Unicode     : " + CPcons) ; 
    System.out.println ("Конструктор копії: " + Copycon) ; 
    System.out.println ("StringBuffer     : " + StrBuffcon) ; 
    System.out.println ("StringBuider     : " + StrBuildcon) ; 
  } 
}
Після компілювання програми, збирання пакету і виконання, можна отримати наступне (попередній код міститься у файлі MainClass.java): JavaStrings_simple_example_compilation

Методи класу String

Наступні методи визначають множину операцій, які можна виконати за допомогою об'єкта класу String.
char charAt(int index)
Повертає символ за вказаним індексом.
int codePointAt(int index)
Повертає значення коду (Unicode) символу за вказаним індексом.
int codePointBefore(int index)
Повертає значення коду символу, який знаходиться перед вказаним індексом.
int codePointCount(int beginIndex, int endIndex)
Повертає кількість значень кодів Unicode в заданому проміжку тексту.
int compareTo(String anotherString)
Лексикографічне порівняння двох об'єктів String.
int compareToIgnoreCase(String str)
Лексикографічне порівняння двох об'єктів з ігноруванням регістру букв.
String concat(String str)
Приєднує вказаний рядок символів, як об'єкт String, до поточної і повертає результат.
boolean contains(CharSequence s)
Повертає істину (true), якщо в поточному об'єкті знаходиться послідовність символів CharSequence.
boolean contentEquals(CharSequence cs)
Порівнює поточний об'єкт String з наданим об'єктом CharSequence.
boolean contentEquals(StringBuffer sb)
Порівнює поточний об'єкт String з наданим об'єктом StringBuffer.
static String copyValueOf(char[] data)
Еквівалент до valueOf(char[]).
static String copyValueOf(char[] data, int offset, int count)
Еквівалент до valueOf(char[], int, int).
boolean endsWith(String suffix)
Повертає true, якщо значення поточного об'єкту закінчується наданою послідовністю.
boolean equals(Object anObject)
Порівнює поточний об'єкт String з наданим об'єктом.
boolean equalsIgnoreCase(String anotherString)
Порівнює поточний і наданий об'єкти String, ігноруючи регістр символів.
static String format(Locale l, String format, Object... args)
Повертає об'єкт String з форматованим значенням у відповідності до локалі l, формату format і аргументів args.
static String format(String format, Object... args)
Повертає об'єкт String з форматованим значенням у відповідності до формату format і аргументів args.
byte[] getBytes()
Перетворює значення поточного об'єкта у послідовність байтів, які представляють собою символи закодовані у, стандартну для даного середовища, систему кодувань символів.
byte[] getBytes(Charset charset)
Перетворює значення поточного об'єкта у послідовність байтів, які представляють собою символи закодовані у вказану систему кодувань символів.
byte[] getBytes(String charsetName)
Перетворює значення поточного об'єкта у послідовність байтів, які представляють собою символи закодовані у вказану систему кодувань символів, вказану як об'єкт String з значенням канонічного ім'я кодування.
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
Копіює символи з поточного об'єкту у символьний масив dst.
int hashCode()
Повертає обчислене hesh-значення для поточного об'єкту String.
int indexOf(int ch)
Повертає індекс найпершого примірника вказаної букви в даному примірнику об'єкта String.
int indexOf(int ch, int fromIndex)
Повертає індекс найпершого примірника вказаної букви в даному примірнику об'єкта String, починаючи з індексу fromIndex.
int indexOf(String str)
Повертає індекс початку входження вказаного об'єкта str у поточний примірник String.
int indexOf(String str, int fromIndex)
Повертає індекс початку входження вказаного об'єкта str у поточний примірник String, починаючи з індекса fromIndex.
String intern()
Повертає канонічне представлення поточного значення.
boolean isEmpty()
Повертає true, якщо вміст поточного об'єкта не пустий.
static String join(CharSequence delimiter, CharSequence... elements)
Повертає новий об'єкт String, який складається з значень елементів elements, розділеними розділювачами delimiter.
static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
Повертає новий об'єкт String, який складається з копій значень елементів CharSequence, розділеними розділювачами delimiter.
int lastIndexOf(int ch)
Повертає індекс останнього входження вказаного символу в поточний
int lastIndexOf(int ch, int fromIndex)
Повертає останній індекс значення, яке співпадає з переданим, пошук виконується в зворотньому напрямку.
int lastIndexOf(String str)
Повертає індекс початку останнього входження заданого рядка.
int lastIndexOf(String str, int fromIndex)
Повертає індекс початку останнього входження заданого рядка, пошук виконується з кінця поточного рядка з вказаного індекса fromIndex.
int length()
Повертає довжину поточного об'єкта класу String в символах.
boolean matches(String regex)
Повертає true, якщо даний рядок відповідає вказаному рядку-шаблону regex, в іншому випадку false.
int offsetByCodePoints(int index, int codePointOffset)
Повертає індекс для поточного об'єкту, який являється зміщенням на codePointOffset від індексу index (або генерує виключення).
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
Тестує, чи регіони поточного і переданого об'єктів співпадають між собою.
boolean regionMatches(int toffset, String other, int ooffset, int len)
Тестує, чи регіони поточного і переданого об'єктів співпадають між собою.
String replace(char oldChar, char newChar)
Повертає новий об'єкт класу String, який містить значення з усіма заміненими символами oldChar на newChar.
String replace(CharSequence target, CharSequence replacement)
Повертає новий примірник класу String з значенням у якому усі випадки входження послідовнсті символів target замінені на replacement.
String replaceAll(String regex, String replacement)
Повертає новий примірник класу String з значенням у якому усі випадки співпадання шаблонного виразу regex з підрядком поточного примірника, замінюються на рядок replacement.
String replaceFirst(String regex, String replacement)
Повертає новий примірник класу String з значенням, у якому перший підрядок, який відповідає шаблонному виразу regex, замінений на replacement.
String[] split(String regex)
Значення поточного об'єкта розрізається навколо підрядків, які співпадають з шаблонним виразом regex, і повертаються в якості масиву об'єктів String.
String[] split(String regex, int limit)
Значення поточного об'єкта розрізається навколо підрядків, які співпадають з шаблонним виразом regex, і повертаються в якості масиву об'єктів String.
boolean startsWith(String prefix)
Перевіряє, чи значення даного об'єкта починається з послідовності prefix.
boolean startsWith(String prefix, int toffset)
Перевіряє, чи значення підрядка даного об'єкта починається з послідовності prefix.
CharSequence subSequence(int beginIndex, int endIndex)
Повертає послідовність символів
String substring(int beginIndex)
Повертає новий об'єкт String, який має значення підрядка поточного об'єкта.
String substring(int beginIndex, int endIndex)
Повертає новий об'єкт String, який має значення підрядка поточного об'єкта.
char[] toCharArray()
Роздробляє значення поточного об'єкта у новий масив символів.
String toLowerCase()
Перетворює усі символи поточного об'єкта у нижній регістр згідно правил поточної локалі і повертає їх у новому об'єкті String.
String toLowerCase(Locale locale)
Перетворює усі символи поточного об'єкта у нижній регістр згідно правил вказаної локалі і повертає їх у новому об'єкті String.
String toString()
Даний метод повертає об'єкт, з якого був викликаний.
String toUpperCase()
Перетворює усі символи поточного об'єкта у верхній регістр згідно правил поточної локалі і повертає їх у новому об'єкті String.
String toUpperCase(Locale locale)
Перетворює усі символи поточного об'єкта у верхній регістр згідно правил вказаної локалі і повертає їх у новому об'єкті String.
String trim()
Повертає новий примірник класу String, який містить значення поточного об'єкта у якому видалені усі початкові і кінцеві пробіли.
static String valueOf(boolean b)
Повертає новий примірник класу String, який містить представлення булевого значення в рядковому.
static String valueOf(char c)
Повертає рядкове представлення переданого символу.
static String valueOf(char[] data)
Повертає рядкове представлення переданого масиву символів.
static String valueOf(char[] data, int offset, int count)
Повертає рядкове представлення переданого підмасиву символів.
static String valueOf(double d)
Повертає рядкове представлення переданого значення дійсного числа.
static String valueOf(float f)
Повертає рядкове представлення переданого значення дійсного числа.
static String valueOf(int i)
Повертає рядкове представлення переданого значення цілого числа.
static String valueOf(long l)
Повертає рядкове представлення переданого значення цілого числа.
static String valueOf(Object obj)
Повертає рядкове представлення переданого значення. Приклад використання деяких попередніх методів:
/* приклад використання 
** методів класу String */

class MainClass
{
  public static void main (String[] opts)
  {
    String str = "Вивчаємо Java на сайті www.kytok.org.ua" ;
 
    /* конкатенація рядків і метод length */
    System.out.println ("Розмір рядка \"" + str + 
                        "\" складає " + str.length() + " символів") ;
    
    /* підрядок до поточного */
    String substr1 = str.substring ("Вивчаємо ".length(), str.length()) ;
    
    System.out.println (substr1) ;
    
    /* перевірка закінчення */
    System.out.println ("Закінчується на \"www.kytok.org.ua\"? - " + 
                        str.endsWith("www.kytok.org.ua")) ;
                        
    /* Хеш-код для реалізації швидкісного пошуку */
    System.out.println (str.hashCode()) ; 
    System.out.println ("Хеш код рядка \"www.kytok.org.ua\": " + 
                        "www.kytok.org.ua".hashCode()) ; 
    System.out.println ("Хеш код рядка \"Java\": " + 
                        "Java".hashCode()) ; 

    /* Індекс першого входження символу в рядок */
    System.out.println ("Перше входження символу 'w': " + str.indexOf ('w')) ;
    
    /* перебір рядка */
    System.out.print ("Вивід рядка в циклі: ") ;
    for (int iter=0; iter<str.length(); ++iter)
    { System.out.print (str.charAt(iter)) ; }
    System.out.println () ;
    
    /* канонічне представлення рядка */
    System.out.println (str.intern()) ;
    
    /* Відповідність шаблону */
    System.out.println ("Learn Java on www.kytok.org.ua".matches("[a-zA-Z .]*")) ;
    
    /* Заміна по шаблону */
    System.out.println ("Learn Java on www.kytok.org.ua".replaceAll("[A-Z]a[a-z]{2}", "C++")) ;
  }
}
Після компілювання і виконання даного коду можна отримати результат (файл з попереднім кодом названо “MainClass.java”):java_string_methods_exmple_program_output