JavaRush /Java блог /Архив info.javarush /10 самых задаваемых вопросов о строках в Java
ext4
20 уровень

10 самых задаваемых вопросов о строках в Java

Статья из группы Архив info.javarush

Здесь упомянуты 10 самых задаваемых вопросов о строках в Java

[Перевод] 10 самых задаваемых вопросов о строках в Java - 1
  1. Как сравнивать строки? Что использовать: "==" или equals()?

    Вкратце, "==" сравнивает ссылки на строки, а equals() сравнивает значения, содержащиеся в этих строках. Если вы не хотите проверить, что две строки являются одним и тем же объектом, то вам следует использовать equals().

    Также было бы неплохо знать концепцию пула строк.

  2. Почему char[] предпочтительнее строк (String) для защиты конфиденциальной информации?

    Строки неизменяемы. Это значит, что однажды созданная строка не будет изменяться до непосредственного запуска механизма сборщика мусора. В случае с массивом совершенно очевидно, что мы можем изменять его элементы. Таким образом, конфиденциальная информация (например, пароль) не будет храниться в открытом виде в любом месте программы.

  3. Можем ли мы передавать строки в качестве параметра при использовании оператора switch?

    Да, начиная с 7-ой версии JDK. Ранее в 6-ой версии, такой возможности не было.

    
    // java 7 only!
    switch (str.toLowerCase()) {
          case "a":
               value = 1;
               break;
          case "b":
               value = 2;
               break;
    }
    
  4. Как конвертировать строку в целочисленное значение?

    
    int n = Integer.parseInt("10");
    

    Аналогично и для остальных примитивных типов Java.

  5. Как разделить строку на строки с разделителем-пробелом?

    Проще всего использовать регулярные выражения. "\s" выступает как заменитель пробельных символов, таких как " ", "\t", "\r", "\n".

    
    String[] strArray = aString.split("\\s+");
    
  6. <Что на самом деле делает метод substring()?

    В JDK 6, метод substring() показывал часть символов из существующей строки, но не создавал отдельного экземпляра строки. Чтобы создать новую строку, представленную в виде массива символов можно добавить какую-нибудь пустую строку, например, так:

    
    str.substring(m, n) + ""
    

    В результате мы получаем массив символов, являющийся нашей новой строкой. Такой подход иногда может сократить время выполнения кода, потому что сборщик мусора может уничтожить неиспользуемые большие строки и хранить только подстроки.

    В Oracle JDK 7, метод substring() создаёт новый массив символов, не используя уже существующий. Вы также можете взглянуть на диаграмму, представляющую разницу методов substring() в JDK 6 и JDK 7.

  7. String против StringBuilder против StringBuffer

    String против StringBuilder: StringBuilder изменяем, это значит, что мы можем изменить его содержание после создания объекта.

    StringBuilder против StringBuffer: StringBuffer синхронизирован, это значит, что он функционирует корректно при использовании из нескольких потоков одновременно, но медленнее чем StringBuilder.

  8. Как повторить строку несколько раз?

    В Python, мы можем просто умножить строку на число n и, тогда, она будет повторяться n раз. В Java, мы можем использовать метод repeat() из класса StringUtils библиотеки Apache Commons Lang.

    
    String str = "abcd";
    String repeated = StringUtils.repeat(str,3);
    //abcdabcdabcd
    
  9. Как конвертировать строку в дату?

    
    String str = "Sep 17, 2013";
    Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
    System.out.println(date);
    //Tue Sep 17 00:00:00 EDT 2013
    
  10. Как посчитать количество вхождений определённого символа в строке?

    Используйте класс StringUtils из библиотеки Apache Commons Lang.

    
    int n = StringUtils.countMatches("11112222", "1");
    System.out.println(n);
    
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Никита Уровень 9
26 июля 2020
Не получается использовать умножение строк.Импортирую: import com.sun.xml.internal.ws.util.StringUtils; Далее repeat - не находит. в чем может быть проблема?
Сергей Уровень 22
9 июня 2019
Очень полезная статья, особенно про умножение строк и метод repeat().
ikratkoe Уровень 17
22 сентября 2015
Вообще то, код в статье в п.9 про дату не работает. Скомпилируйте…
SergioShapoval Уровень 41
1 июля 2015
Спасибо за перевод
provisota Уровень 33
20 июня 2014
9. Как конвертировать строку в дату?
В связи с выходом Java 8 и новыми классами для работы со временем LocalDate и DateTimeFormatter приведённый код уже не актуален, можно заменить его например на такой:
String str = "24/06/2014";
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/uuuu"); 
LocalDate date = LocalDate.parse(str, f);
terranum Уровень 28
20 июня 2014
Подкинул в карму за перевод! :)