String

Введение в строки. Класс String

Последнее обновление: 31.10.2018

Строка представляет собой последовательность символов. Для работы со строками в Java определен класс String, который предоставляет ряд методов для манипуляции строками.
Физически объект String представляет собой ссылку на область в памяти, в которой размещены символы.

Для создания новой строки мы можем использовать один из конструкторов класса String, либо напрямую присвоить строку в двойных кавычках:

public static void main(String[] args) {
        
    String str1 = "Java";
    String str2 = new String(); // пустая строка
    String str3 = new String(new char[] {'h', 'e', 'l', 'l', 'o'});
    String str4 = new String(new char[]{'w', 'e', 'l', 'c', 'o', 'm', 'e'}, 3, 4);//3 -начальный индекс, 4 -кол-во символов
        
    System.out.println(str1); // Java
    System.out.println(str2); //
    System.out.println(str3); // hello
    System.out.println(str4); // come
}

При работе со строками важно понимать, что объект String является неизменяемым (immutable). То есть при любых операциях
над строкой, которые изменяют эту строку, фактически будет создаваться новая строка

Поскольку строка рассматривается как набор символов, то мы можем применить метод length() для нахождения длины строки или длины набора символов:

String str1 = "Java";
System.out.println(str1.length()); // 4

А с помощью метода toCharArray() можно обратно преобразовать строку в массив символов:

String str1 = new String(new char[] {'h', 'e', 'l', 'l', 'o'});
char[] helloArray = str1.toCharArray();

Строка может быть пустой. Для этого ей можно присвоить пустые кавычки или удалить из стоки все символы:

String s = "";   // строка не указывает на объект
if(s.length() == 0) System.out.println("String is empty");

В этом случае длина строки, возвращаемая методом length(), равна 0.

Класс String имеет специальный метод, который позволяет проверить строку на пустоту — isEmpty(). Если строка пуста, он возвращает true:

String s = "";   // строка не указывает на объект
if(s.isEmpty()) System.out.println("String is empty");

Переменная String может не указывать на какой-либо объект и иметь значение null:

String s = null;   // строка не указывает на объект
if(s == null) System.out.println("String is null");

Значение null не эквивалентно пустой строке. Например, в следующем случае мы столкнемся с ошибкой выполнения:

String s = null;   // строка не указывает на объект
if(s.length()==0) System.out.println("String is empty");	// ! Ошибка

Так как переменная не указывает ни на какой объект String, то соответственно мы не можем обращаться к методам объекта String.
Чтобы избежать подобных ошибок, можно предварительно проверять строку на null:

String s = null;   // строка не указывает на объект
if(s!=null && s.length()==0) System.out.println("String is empty");

Основные методы класса String

Основные операции со строками раскрывается через методы класса String, среди которых можно выделить следующие:

  • concat(): объединяет строки

  • valueOf(): преобразует объект в строковый вид

  • join(): соединяет строки с учетом разделителя

  • сompareTo(): сравнивает две строки

  • charAt(): возвращает символ строки по индексу

  • getChars(): возвращает группу символов

  • equals(): сравнивает строки с учетом регистра

  • equalsIgnoreCase(): сравнивает строки без учета регистра

  • regionMatches(): сравнивает подстроки в строках

  • indexOf(): находит индекс первого вхождения подстроки в строку

  • lastIndexOf(): находит индекс последнего вхождения подстроки в строку

  • startsWith(): определяет, начинается ли строка с подстроки

  • endsWith(): определяет, заканчивается ли строка на определенную подстроку

  • replace(): заменяет в строке одну подстроку на другую

  • trim(): удаляет начальные и конечные пробелы

  • substring(): возвращает подстроку, начиная с определенного индекса до конца или до определенного индекса

  • toLowerCase(): переводит все символы строки в нижний регистр

  • toUpperCase(): переводит все символы строки в верхний регистр

Разберем работу этих методов.

НазадВперед

Методы String

Метод Описание
charAt() Возвращает символ строки с указанным индексом (позицией).
charCodeAt() Возвращает числовое значение Unicode символа, индекс которого был передан методу в качестве аргумента.
concat() Возвращает строку, содержащую результат объединения двух и более предоставленных строк.
fromCharCode() Возвращает строку, созданную с помощью указанной последовательности значений символов Unicode.
indexOf() Возвращает позицию первого символа первого вхождения указанной подстроки в строке.
lastIndexOf() Возвращает позицию последнего найденного вхождения подстроки или -1, если подстрока не найдена.
localeCompare() Возвращает значение, указывающее, эквивалентны ли две строки в текущем языковом стандарте.
match() Ищет строку, используя предоставленный шаблон регулярного выражения, и возвращает результат в виде массива. Если совпадений не найдено, метод возвращает значение null.
replace() Ищет строку для указанного значения или регулярного выражения и возвращает новую строку, где указанные значения будут заменены. Метод не изменяет строку, для которой он вызывается.
search() Возвращает позицию первого соответствия указанной подстроки или регулярного выражения в строке.
slice() Позволяет извлечь подстроку из строки. Первый аргумент указывает индекс с которого нужно начать извлечение. Второй необязательный аргумент указывает позицию, на которой должно остановиться извлечение. Если второй аргумент не указан, то извлечено будет все с той позиции, которую указывает первый аргумент, и до конца строки.
split() Разбивает строку на подстроки, возвращая массив подстрок. В качестве аргумента можно передать символ разделитель (например запятую), используемый для разбора строки на подстроки.
substr() Позволяет извлечь подстроку из строки. Первый аргумент указывает индекс с которого нужно начать извлечение. Второй аргумент указывает количество символов, которое нужно извлечь.
substring() Извлекает символы из строки между двух указанных индексов, если указан только один аргумент, то извлекаются символы от первого индекса и до конца строки.
toLocaleLowerCase() Преобразует символы строки в нижний регистр с учетом текущего языкового стандарта.
toLocaleUpperCase() Преобразует символы строки в верхний регистр с учетом текущего языкового стандарта.
toLowerCase() Конвертирует все символы строки в нижний регистр и возвращает измененную строку.
toString() Возвращает строковое представление объекта.
toUpperCase() Конвертирует все символы строки в верхний регистр и возвращает измененную строку.
trim() Удаляет пробелы в начале и конце строки и возвращает измененную строку.
valueOf() Возвращает примитивное значение объекта.

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Файл используется для чтения файлов. Он предлагает методы и , которые возвращают один символ и несколько символов соответственно. Кроме того, он принимает или в конструктор.

Считыватель файлов.чтение(символ[])

Давайте откроем файл с помощью и прочитаем его содержимое:

FileReader in = new FileReader("input.txt");

char[] chars = new char;
int n = in.read(chars, 0, chars.length);

String contents = new String(chars);

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

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

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

Читатель файлов.чтение()

Метод без считывает по одному символу за раз. Мы захотим просмотреть содержимое и прочитать каждый символ самостоятельно:

FileReader in = new FileReader("input.txt");

StringBuilder sb = new StringBuilder();

while(in.read() != -1) {
	sb.append(in.read());
}

String contents = sb.toString();
in.close();

Здесь мы проверяем, не является ли прочитанный символ , что указывало на то, что для чтения больше не осталось символов. Если нет, мы его в и, наконец, преобразуем его в .

Примечание: Оба и считанные байты, преобразуйте их в символы и возвращайте их по одному . Это неэффективно и должно выполняться с помощью буферизации , когда это возможно.

Буферизатор

-это объект, предназначенный для чтения текста из потока ввода символов. Он буферизован, что означает, что он использует внутренний буфер для временного хранения. Как мы видели в предыдущем разделе, “обычное” сканирование иногда бывает неэффективным.

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

Давайте создадим экземпляр :

BufferedReader in = new BufferedReader(new FileReader("input.txt"));

На данный момент у нас есть объект bufferedreader, готовый для чтения содержимого из . В этом примере мы будем читать файл построчно, хотя поддерживает чтение отдельных символов по отдельности, а также нескольких символов в массив.

Давайте используем этот экземпляр для чтения файла и сохранения его содержимого, строка за строкой, в строку:

StringBuilder sb = new StringBuilder();

while(in.readLine != null) {
	sb.append(in.readLine()).append("\n");
}

String contents = sb.toString();
in.close();

Еще раз, мы используем для сбора всех строк. Чтобы разделить каждую строку, мы добавляем нулевой терминатор ( ) между ними. Наконец, мы закрываем ручей.

Вывод

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

Мы рассмотрели метод , метод , метод , а также классы , и

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

String myString = "there,,are,more,than,three,commas,,,";
String [] splitStrings = myString.split(",", -1);

for(String string : splitStrings){
    System.out.println(String.format(" \" %s \"", string));
}

будет разделена как можно больше раз, и конечные пустые строки будут добавлены в массив:

"there"
""
"are"
"more"
"than"
"three"
"commas"
""
""
""

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

Если мы установим равным , строка снова будет разделена как можно больше раз, но результирующий массив не будет содержать завершающих пустых пробелов:

String myString = "there,,are,more,than,three,commas,,,";

// Equivalent to calling the split() method with only the regex parameter
String [] splitStrings = myString.split(",", 0);

for(String string : splitStrings){
    System.out.println(String.format(" \" %s \"", string));
}

Это дало бы нам:

"there"
""
"are"
"more"
"than"
"three"
"commas"

Примечание о специальных символах

Как мы упоминали ранее, параметр , передаваемый в качестве разделителя в методе , является регулярным выражением. Мы должны обязательно избегать специальных символов, если хотим использовать их буквальное значение в качестве разделителя. Например, символ означает “один или несколько экземпляров следующих символов”.

В регулярном выражении есть 12 таких символов. Это: , , , , , , , , , , , . Вы можете увидеть их значение в регулярном выражении .

Если мы хотим разделить на один из этих символов, необходимо соблюдать особую осторожность, чтобы избежать этих символов в параметрах метода. Один из способов, которым мы можем это использовать, – использовать обратную косую черту

Например:

string.split("\\|");

Разделяет переменную на символ /. Мы используем здесь две обратные косые черты, так как нам нужно сначала избежать Java-значения обратной косой черты, чтобы обратную косую черту можно было применить к символу |.

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

string.split("");

Еще один способ избежать специальных символов-использовать :

string.split(Pattern.quote("|"));

Вывод

Метод класса Java является очень полезным и часто используемым инструментом. Большинство данных, особенно полученных при чтении файлов, потребовали бы некоторой предварительной обработки, такой как разделение строки, для получения из нее значимой информации.

В этой статье мы рассмотрели, как разделять строки в Java.

Метод toString() Java: синтаксис

public String toString()
{
      return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
// программа Java для демонстрации
// работы метода toString()
class Best_Friend {
    String name;
    int age;
    String college;
    String course;
    String address;
    Best_Friend
    (String name, int age, String college, String course, String address)
    {
        this.name = name;
        this.age = age;
        this.college = college;
        this.course = course;
        this.address = address;
    }
public static void main(String[] args)
    {
        Best_Friend b = 
        new Best_Friend("Gulpreet Kaur", 21, "BIT MESRA", "M.TECH", "Kiriburu");
        System.out.println(b);
        System.out.println(b.toString());
    }
}

Результат:

Best_Friend@232204a1
Best_Friend@232204a1

Пояснение: В приведенной выше программе мы создаем объект класса Best_Friend и предоставляем всю информацию о друге. Но когда мы пытаемся вывести Object, мы отображаем данные из classname@HashCode_in_Hexadeciaml_form. Если нужна соответствующая информация об объекте Best_friend, тогда нужно переопределить метод toString Java класса Object в классе Best_Friend.

// программа Java для демонстрации
// работы метода toString()
class Best_Friend {
    String name;
    int age;
    String college;
    String course;
    String address;
    Best_Friend
    (String name, int age, String college, String course, String address)
    {
        this.name = name;
        this.age = age;
        this.college = college;
        this.course = course;
        this.address = address;
    }
public String toString()
    {
        return name + " " + age + " " + college + " " + course + " " + address;
    }
public static void main(String[] args)
    {
        Best_Friend b = 
        new Best_Friend("Gulpreet Kaur", 21, "BIT MESRA", "M.TECH", "Kiriburu");
        System.out.println(b);
        System.out.println(b.toString());
    }
}

Вывод:

Gulpreet Kaur 21 BIT MESRA M.TECH Kiriburu
Gulpreet Kaur 21 BIT MESRA M.TECH Kiriburu

Примечание. Во всех классах контейнерах, коллекциях, классах String, StringBuffer, StringBuilder метод toString Java переопределяется для значимого представления String. Поэтому настоятельно рекомендуется также переопределить метод toString() и в нашем классе.

// программа Java для демонстрации
// работы метода toString()
import java.util.*;
class Best_Friend {
    String name;
    int age;
    String college;
    String course;
    String address;
    Best_Friend
    (String name, int age, String college, String course, String address)
    {
        this.name = name;
        this.age = age;
        this.college = college;
        this.course = course;
        this.address = address;
    }
public static void main(String[] args)
    {
        Best_Friend b = 
        new Best_Friend("Gulpreet Kaur", 21, "BIT MESRA", "M.TECH", "Kiriburu");
        System.out.println(b);
        String s = new String("Gulpreet Kaur");
        System.out.println(s);
        Integer i = new Integer(21);
        System.out.println(i);
        ArrayList l = new ArrayList();
        l.add("BIT");
        l.add("M.TECH");
        System.out.println(l);
    }
}

Вывод:

Best_Friend@232204a1
Gulpreet Kaur
21

Пожалуйста, оставляйте свои комментарии, если найдете ошибку в примерах использования метода toString или захотите поделиться дополнительной информацией по теме статьи.

Пожалуйста, опубликуйте ваши отзывы по текущей теме статьи. За комментарии, подписки, отклики, лайки, дизлайки низкий вам поклон!

Нахождение длины строки

java string length() возвращает общее количество символов в строке. Длина строки Java такая же, как в коде Unicode.

Пример:

public class LengthExample{  
public static void main(String args[]){  
String s1="javatpoint";  
String s2="python";  
System.out.println("string length is: "+s1.length());//10 is the length of javatpoint string  
System.out.println("string length is: "+s2.length());//6 is the length of python string  
}}  

Еще один способ:

public class LengthExample2 {  
    public static void main(String[] args) {  
        String str = "Javatpoint";  
        if(str.length()>0) {  
            System.out.println("String is not empty and length is: "+str.length());  
        }  
        str = "";  
        if(str.length()==0) {  
            System.out.println("String is empty now: "+str.length());  
        }  
    }  
}  

Конвертация с помощью String.format()

String.format() — это новый альтернативный метод, который можно использовать для преобразования Integer в объект String. Хотя целью этого метода является форматирование строки, его также можно использовать для преобразования.

Синтаксис

Есть два разных выражения:

public static String format(Locale l, String format, Object… args)

public static String format(String format, Object… args)

Параметры

Аргументы для этого метода:

  • l: локальный адрес для форматирования;
  • format: строка формата, которая включает спецификатор формата и иногда фиксированный текст;
  • args: аргументы, которые ссылаются на спецификаторы формата, установленные в параметре format.

Возвращаемое значение

Этот метод возвращает отформатированную строку в соответствии со спецификатором формата и указанными аргументами.

Пример

class Method3
{ 
  public static void main(String args[]) 
  { 
    int number = -1234; 
    String str = String.format("%d", number);
    System.out.println("With format method: string = " + str);
  } 
}

StartWith() и EndWith()

Методы StartWith() и EndWith() проверяют, начинается ли String с определенной подстроки:

String one = "This is a good day to code";

System.out.println( one.startsWith("This")    );
System.out.println( one.startsWith("This", 5) );

System.out.println( one.endsWith("code")    );
System.out.println( one.endsWith("shower")  );

В этом примере создается строка и проверяется, начинается ли она и заканчивается ли она различными подстроками.

  • Первая строка (после объявления String) проверяет, начинается ли String с подстроки «This». Поскольку это происходит, метод startWith() возвращает true.
  • Вторая строка проверяет, начинается ли строка с подстроки «This» при запуске сравнения с символа с индексом 5. Результат равен false, поскольку символ с индексом 5 равен «i».
  • Третья строка проверяет, заканчивается ли String подстрокой «code». Поскольку это происходит, метод endWith() возвращает true.
  • Четвертая строка проверяет, заканчивается ли String подстрокой «shower». Так как это не так, метод endWith() возвращает false.

Creating Format Strings

You have seen the use of the and methods to print output with formatted numbers. The class has an equivalent class method, , that returns a object rather than a object.

Using static method allows you to create a formatted string that you can reuse, as opposed to a one-time print statement. For example, instead of

System.out.printf("The value of the float " +
                  "variable is %f, while " +
                  "the value of the " + 
                  "integer variable is %d, " +
                  "and the string is %s", 
                  floatVar, intVar, stringVar); 

you can write

String fs;
fs = String.format("The value of the float " +
                   "variable is %f, while " +
                   "the value of the " + 
                   "integer variable is %d, " +
                   " and the string is %s",
                   floatVar, intVar, stringVar);
System.out.println(fs);

Класс String — основной класс представляющий строки

Мы уже создавали строковые переменные и тогда я просил Вас поверить мне на слово и просто писать что-то вроде: String hello = «Hello world». Это и есть первый способ создать строковую переменную. Второй способ — это создать строку как мы создаем экземпляр класса, новые объекты через ключевое слово new. String hello = new String(«Hello world»). Различия в способах более существенны, чем кажутся на первый взгляд. Для того чтобы понять их нужно немного узнать о распределении памяти.

В языке Java объекты хранятся в куче (heap), а примитивные типы и ссылки на объекты в стеке (stack). Но есть еще такой механизм как пул (pool). Это механизм, если можно так назвать, сохранения строковых переменных для экономии места в памяти. Я нарисовал примерную схему. И попытаюсь объяснить по ней: 

Выглядит не очень. Я знаю.

Когда мы создаем строку через ключевое слово new, тогда создается одна строка в пуле и в куче. Если строка создается без ключевого слова new, вот таким образом: String hello = «Hello world» — тогда она создается только в пуле. Если так создать точно такую же строку, новый объект не создается, а две переменные ссылаются на один объект в пуле. Такой механизм пула есть только в объекта String и классов-оберток для примитивных типов (о них мы еще поговорим).

Заметьте, как работает память с другими объектами. На примере объекта Cat видно, что при создании нового объекта с той же самой ссылкой, старый объект уничтожается сборщиком мусора — это специальный механизм в Java, задача которого освобождать память от ненужных объектов (тех на которые потеряна ссылка).

substring(int beginIndex, int endIndex)

Этот метод вернет новый объект String, содержащий подстроку данной строки от указанного startIndex до endIndex. И получит часть String, начиная с данного beginIndex и до указанного endIndex.

public String substring(int beginIndex, int endIndex)

где beginIndex — индекс, с которого нужно начать извлечение возвращаемой подстроки. (включительно) endIndex — индекс, с которого нужно закончить извлечение возвращаемой подстроки. (эксклюзив)

Смысл в том, что мы можем указать, где начинать и заканчивать копирование символов из исходной строки.

public class SubstringTest {  
   public static void main(String[] args) {
      String testString = "ABCDEFGHIJ";
      System.out.println(testString.substring(0,5));
      System.out.println(testString.substring(1,5));
      System.out.println(testString.substring(2,5));
      System.out.println(testString.substring(0,6));
      System.out.println(testString.substring(1,6));
      System.out.println(testString.substring(2,6));
      System.out.println(testString.substring(0,7));
      System.out.println(testString.substring(1,7));
      System.out.println(testString.substring(2,7));
   }
}

Вывод

ABCDE
BCDE
CDE
ABCDEF
BCDEF
CDEF
ABCDEFG
BCDEFG
CDEFG

Вот пример программы, которая примет строку и распечатает все возможные подстроки.

import java.util.Scanner;
public class PrintAllSubstring {  
   public static void main(String[] args) {
      System.out.println("Enter a string:");
      Scanner in = new Scanner(System.in);
      String inputString = in.nextLine();
      for (int beginIndex = 0; beginIndex < inputString.length(); beginIndex++) {
         for (int endIndex = beginIndex + 1; endIndex <= inputString.length(); endIndex++) {
            System.out.println(inputString.substring(beginIndex, endIndex));
         }
      }
   }
}

И вот результат, предполагающий, что была введена строка wxyz.

Enter a string:
wxyz
w
wx
wxy
wxyz
x
xy
xyz
y
yz
z

Вот пример того, как получить середину строки с помощью метода substring в алгоритме.

public class MiddleStrTest {
   public static void main(String[] args) {
      System.out.println("A       --> " + getMiddleString("A"));
      System.out.println("AB      --> " + getMiddleString("AB"));
      System.out.println("ABC     --> " + getMiddleString("ABC"));
      System.out.println("ABCD    --> " + getMiddleString("ABCD"));
      System.out.println("ABCDE   --> " + getMiddleString("ABCDE"));
      System.out.println("ABCDEF  --> " + getMiddleString("ABCDEF"));
      System.out.println("ABCDEFG --> " + getMiddleString("ABCDEFG"));
   }
   private static String getMiddleString(String str) {
      if (str.length() <= 2) {
         return str;
      }
      int beginIndex = (str.length() - 1) / 2;
      int endIndex = beginIndex + 2 - (str.length() % 2);
      return str.substring(beginIndex, endIndex);
   }
}

Вывод

A       --> A
AB      --> AB
ABC     --> B
ABCD    --> BC
ABCDE   --> C
ABCDEF  --> CD
ABCDEFG --> D

Вот пример программы, которая перевернет строку.

public class ReverseTest {
   public static void main(String[] args) {
      System.out.println(reverse("ABCDEFG"));
   }
   private static String reverse(String str) {
      if (str.length() <= 1) {
         return str;
      }
      return reverse(str.substring(1)) + str.substring(0, 1);
   }
}

Это выведет обратную строку ABCDEFG: Вот пример программы, которая проверит, является ли строка палиндромом или нет.

public class PalTest {
   public static void main(String[] args) {
      System.out.println(palindrome("ABCBA"));
      System.out.println(palindrome("ABCCBA"));
      System.out.println(palindrome("ABCCXA"));
      System.out.println(palindrome("ABCDEFG"));
   }
   private static boolean palindrome(String str) {
      if (str.length() <= 1) {
         return true;
      }
      String first = str.substring(0, 1);
      String last = str.substring(str.length() - 1);
      return first.equals(last)
            && palindrome(str.substring(1, str.length() - 1));
   }
}

Вывод

true
true
false
false

Оцени статью

Оценить

Средняя оценка / 5. Количество голосов:

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Спасибо за ваши отзыв!

replace()

Этот метод находит первое упоминание  в заданной строке и заменяет его на .

Отдаёт новую строку, не трогая оригинальную.

Вы можете передать регулярное выражение как первый аргумент:

 заменяет только первое упоминание, но а если вы будете использовать regex как поиск строки, то вы можете использовать ():

Второй параметр может быть функцией. Эта функция будет вызвана с заданным количеством аргументов, когда найдётся совпадение (или каждое совпадение в случае с regex ):

  • Нужная строка
  • Целое число, которое указывает позицию в строке, где произошло совпадение
  • Строка

Отдающееся значение функции заменит совпадающую часть строки.

Пример:

Это работает и для обычных строк, а не только для регулярок:

В случае c regex, когда выбираются группы, все эти значения будут переданы как аргументы прямо после параметра совпадения.

Введите строку с помощью пользовательских методов

Класс String в Java не предоставляет удобного метода для заполнения, поэтому давайте создадим несколько методов самостоятельно. Однако сначала давайте определимся с некоторыми ожиданиями:

assertEquals("    123456", padLeftZeros("123456", 10));
assertEquals("0000123456", padLeftZeros("123456", 10));

2.1. Использование StringBuilder

Мы можем достичь этого с помощью StringBuilder и некоторой процедурной логики:

public String padLeftZeros(String inputString, int length) {
    if (inputString.length() >= length) {
        return inputString;
    }
    StringBuilder sb = new StringBuilder();
    while (sb.length() < length - inputString.length()) {
        sb.append('0');
    }
    sb.append(inputString);

    return sb.toString();
}

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

Конечно, если бы мы хотели pad с другим символом, мы могли бы просто использовать его вместо .

Аналогично, если мы хотим править страницу, нам просто нужно сделать new | StringBuilder(входная строка) вместо этого, а затем добавить пробелы в конце.

2.2. Использование подстроки

Другой способ сделать левое заполнение – создать Строку нужной длины, содержащую только символы заполнения, а затем использовать метод substring () :

StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
    sb.append(' ');
}

return sb.substring(inputString.length()) + inputString;

2.3. Использование String.format

И, наконец, начиная с Java 5, мы можем использовать String .format() :

return String.format("%1$" + length + "s", inputString).replace(' ', '0');

Следует отметить, что по умолчанию операция заполнения будет выполняться с использованием пробелов. Вот почему нам нужно использовать заменять() метод, если мы хотим заполнить нули или любой другой символ.

Для правильной площадки нам просто нужно использовать другой флаг: %1$-

Creating strings using the new keyword

So far we have created strings like primitive types in Java.

Since strings in Java are objects, we can create strings using the keyword as well. For example,

In the above example, we have created a string name using the keyword.

Here, when we create a string object, the constructor is invoked. To learn more about constructor, visit Java Constructor.

Note: The class provides various other constructors to create strings. To learn more, visit Java String (official Java documentation).

Create String using literals vs new keyword

Now that we know how strings are created using string literals and the keyword, let’s see what is the major difference between them.

In Java, the JVM maintains a string pool to store all of its strings inside the memory. The string pool helps in reusing the strings.

1. While creating strings using string literals,

Here, we are directly providing the value of the string (). Hence, the compiler first checks the string pool to see if the string already exists.

  • If the string already exists, the new string is not created. Instead, the new reference, example points to the already existed string ().
  • If the string doesn’t exist, the new string ( is created.

2. While creating strings using the new keyword,

Here, the value of the string is not directly provided. Hence, the new string is created all the time.

Метод сравнения String compareTo()

Метод сравнения compareTo() применяется, если надо определить лексикографический порядок строк. Он выполняет сравнение значения char, действуя аналогично equals(). Когда 2 строки совпадают, compareTo() вернёт значение «ноль» (результат = 0). Сравнивая 2 строки, он вернёт положительное целое число (результат > 0), если 1-й объект String следует за 2-й строкой. Соответственно, метод вернёт отрицательный результат (результат < 0), когда 1-й объект String будет предшествовать 2-й строке:

result1 == result2  возвращается ;
    result1 > result2   возвращается положительное значение;
    result1 < result2    возвращается отрицательное значение.

Приведём пример:

class TestClass{
  public static void main (String[] args)   {
    String str1 = "Java";
    String str2 = "Java";
    String str3 = "ASP";
    int val = ;
    val = str1.compareTo(str2);
    System.out.println(val);
    val = str1.compareTo(str3);
    System.out.println(val);
    val = str3.compareTo(str1);
    System.out.println(val);
  }
}

Итог:

9
-9

На этом всё, очень надеемся, что этот материал будет вам полезен при сравнении строк в «Джава».

При подготовке статьи использовалась публикация «String Comparison in Java».

Хотите знать больше? Приходите на курс!

.

Поиск с помощью indexOf()

Вы можете искать подстроки в Strings, используя метод indexOf():

String string1 = "Hello World";

int index = string1.indexOf("World");

Индексная переменная будет содержать значение 6 после выполнения этого кода. Метод indexOf() возвращает индекс, в котором находится первый символ в первой соответствующей подстроке. В этом случае W совпадающей подстроки World была найдена по индексу 6. Если подстрока не найдена в строке, метод возвращает -1.

Существует версия метода indexOf(), которая берет индекс, с которого начинается поиск. Таким образом, вы можете искать в строке, чтобы найти более одного вхождения подстроки:

String theString = "is this good or is this bad?";
String substring = "is";

int index = theString.indexOf(substring);
while(index != -1) {
    System.out.println(index);
    index = theString.indexOf(substring, index + 1);
}

Этот код просматривает строку «это хорошо или это плохо?» для вхождений подстроки «is». Для этого используется метод indexOf(substring, index). Параметр index указывает, с какого индекса символа в строке следует начать поиск. В этом примере поиск начинается с 1 символа после индекса, в котором было найдено предыдущее вхождение.

Вывод:

0
5
16
21

Подстрока «is» находится в четырех местах. Два раза в словах «есть» и два раза внутри слова «этот».

Класс Java String также имеет метод lastIndexOf(), который находит последнее вхождение подстроки:

String theString = "is this good or is this bad?";
String substring = "is";

int index = theString.lastIndexOf(substring);
System.out.println(index);

Выход — 21, который является индексом последнего вхождения подстроки «is».

Классы StringBuilder и StringBuffer

Давайте теперь разберемся со StringBuilder и StringBuffer классами. По сути дела, это почти одинаковые классы. Единственное различие между ними: StringBuffer работает медленнее, но он потокобезопасный.  Его использование целесообразно при написании программ на многопоточность.

Если Вы посмотрите на код выше, то последний метод, который я написал была конкатенация строк. То есть простое объединение строк в одну. Когда Вы работаете с классом String, результатом такой операции будет новый объект. Если программа конкатенирует много строк это может существенно потребить ресурсы памяти. В отличие от String классы StringBuilder, StringBuffer конкатенируют строки не создавая новый объект. У них есть метод append().

  
 

StringBuilder string = new StringBuilder(«Hello world»);         String str = «!!!»;         System.out.println(string.append(str));//Hello world!!!

Все остальные методы которые есть у класса String есть у данных классов.

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

Вот что у меня получилось:

  
 

package com.string;import java.util.Scanner;public class StringVariables {         private final static String PASSWORD = «pass43_4L»;     private final static String LOGIN = «user»;     public static void main(String args) {         System.out.println(«Введите логин»);         Scanner in = new Scanner(System.in);         String login = in.nextLine();         System.out.println(«Введите пароль»);         String password = in.nextLine();                 if (LOGIN.equalsIgnoreCase(login)){             if (PASSWORD.equals(password)){                 System.out.println(«Приветствую » + login);             }             else {                 System.out.println(«Неверный пароль»);             }         }         else             System.out.println(«Неверный логин»);     }     }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector