StringBuffer и StringBuilder

  1. Отличие между String, StringBuilder, StringBuffer
  2. Конструкторы StringBuilder
  3. Методы charAt(), setCharAt()
  4. Метод append()
  5. Метод insert()
  6. Метод reverse()
  7. Методы delete() и deleteCharAt()
  8. Метод replace()
  9. Методы equals() и hashCode()

1. Отличие между String, StringBuilder, StringBuffer

  1. Классы StringBuffer и StringBuilder в Java используются, когда возникает необходимость сделать много изменений в строке символов.
  2. В отличие от String, объекты типа StringBuffer и StringBuilder могут быть изменены снова и снова.
  3. В Java StringBuilder был введен начиная с Java 5.
  4. Основное различие между StringBuffer и StringBuilder в Java является то, что методы StringBuilder не являются безопасными для потоков (несинхронизированные).
  5. Рекомендуется использовать StringBuilder всякий раз, когда это возможно, потому что он быстрее, чем StringBuffer в Java.
  6. Однако, если необходима безопасность потоков, наилучшим вариантом являются объекты StringBuffer.

2. Конструкторы StringBuilder

  • StringBuilder() - объект StringBuilder можно создать без параметров, при этом в нем будет зарезервировано место для размещения 16 символов.
  • StringBuilder(int size) - вы также можете передать конструктору целое число, для того чтобы явно задать требуемый размер буфера.
  • StringBuilder(String str) - вы можете передать конструктору строку, при этом она будет скопирована в объект и дополнительно к этому в нем будет зарезервировано место еще для 16 символов.
  • StringBuilder(CharSequence chars)

В следующем примере создадим объект класса StringBuilder, и выведем на консоль его размер методом length(). Метод capacity() возвращает размер буфера:

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder("Hello");

        System.out.println("string = " + stringBuilder);
        System.out.println("length = " + stringBuilder.length());
        System.out.println("capacity = " + stringBuilder.capacity());
    }
}

3. Методы charAt(), setCharAt()

Метод charAt() возвращает символ в указанной позиции. А setCharAt() изменяет символ в указанной позиции:

public class SetCharAtDemo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        System.out.println(sb);
        System.out.println("charAt(1) = " + sb.charAt(1));
        sb.setCharAt(1, 'i');
        sb.setLength(2);
        System.out.println(sb);
    }
}

4. Метод append()

Метод append() присоединяет подстроку к строке:

public class AppendDemo {
    public static void main(String[] args) {
        int a = 42;
        StringBuilder sb = new StringBuilder(40);

        String s = sb.append("a = ").append(a).append("!").toString();
        System.out.println(s);
    }
}

5. Метод insert()

Метод insert() вставляет подстроку в указанную позицию:

public class InsertDemo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("I Java!");

        sb.insert(2, "like ");
        System.out.println(sb);
    }
}

6. Метод reverse()

Используется для инвертирования строки:

public class ReverseDemo {
    public static void main(String[] args) {
        StringBuilder s = new StringBuilder("abcdef");

        System.out.println(s);
        s.reverse();
        System.out.println(s);
    }
}

7. Методы delete() и deleteCharAt()

Метод delete() удаляет подстроку, используя указанные позиции.

Метод deleteCharAt() удаляет символ с указанной позиции:

public class DeleteDemo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("This is a test.");

        sb.delete(4, 7);
        System.out.println("После delete: " + sb);

        sb.deleteCharAt(0);
        System.out.println("После deleteCharAt: " + sb);
    }
}

8. Метод replace()

Заменяет подстроку в указанной позиции другой:

public class ReplaceDemo {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder("Этo простой тест.");
        stringBuilder.replace(4, 11, "был");
        System.out.println("После замены: " + stringBuilder);
    }
}

9. Методы equals() и hashCode()

Классы StringBuilder и StringBuffer не переопределяют методы equals() и hashCode(). Они используют реализацию класса Object:
public class StringBuilderEquals {
    public static void main(String[] args) {
        StringBuilder stringBuilder1 = new StringBuilder("Hello");
        StringBuilder stringBuilder2 = new StringBuilder("Hello");

        System.out.println(stringBuilder1.equals(stringBuilder2));
        System.out.println(stringBuilder1 == stringBuilder2);
    }
}
Read also:
Comments