Java | Метод Substring

Этот действительно полезный метод, доступный вам, называется substring. Этот метод позволяет получить один фрагмент текста из другого. Мы рассмотрим substring на примере небольшой игры.

Например, в нашей программе с адресом электронной почты (предыдущий урок) мы могли бы взять последние 6 символов с адреса и посмотреть, входит ли он в доменную зону com.ua.

Чтобы немного попрактиковаться с substring, мы напишем небольшую игру Name Swapper. В этой игре мы изменим первые две буквы фамилии и имени, поменяв их местами. Итак, у нас есть имя:

"Bill Gates"

Мы поменяем местами «Ga» в «Gates» и «Bi» в «Bill», чтобы сделать «Gall» и «Bites». Новое имя будет напечатано следующим образом: «Gall Bites», что в переводе означает «Укусы зла».

Мы будем использовать substring для большей части этой программы. Substring работает так:

String Full = "Bill Gates";
String NameChars = "";
        
NameChars = Full.substring(0, 2);

Вы настраиваете строку для поиска, в данном случае строку «Bill Gates». Она идет после знака равенства. После точки введите название метода substring.

Есть два способа использования substring, и разница заключается в числах в круглых скобках. В коде выше мы имеем два числа, 0 и 2. Это означает, что захват символов начинается в позиции 0 и прекращайте спустя 2 символа. Затем эти 2 символа возвращаются и помещаются в переменную NameChars.

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

String test = Full.substring(2);

На этот раз у нас есть только 1 число в круглых скобках substring. В таком случае Java-программа захватит символы, начиная с позиции 2 и до конца строки test.

Запустите новую программу, чтобы проверить это. Добавьте строку печати в конец, и ваш код должен быть таким:

package nameswapper;

public class NameSwap {

    public static void main(String[] args) {
        
        String Full = "Bill Gates";
        String NameChars = "";
        
        NameChars = Full.substring(0, 2);
        System.out.println(NameChars);      
    }
}

Когда программа запустится, окно вывода должно выглядеть так:

Результат Bi

Таким образом, метод substring позволил нам получить первые два символа имени «Bill».

Чтобы получить первые символы, у нас были 0 и 2 в круглых скобках substring. Вы можете подумать, что, чтобы получить «Ga» от «Gates», мы могли бы просто сделать это:

= Full.substring (5, 2);

Нам все так же нужны 2 символа. Только на этот раз число 5 скажет Java начать с «G» в «Gates». (Первая позиция в строке - это позиция 0, а не позиция 1.) Итак, начните с позиции 5 в строке и возьмите 2 символа.

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

(ПРИМЕЧАНИЕ. Если вы начнете считать с 0 в строке «Bill», вы можете подумать, что позиция 2 - это буква «l». И вы были бы правы. Но substring начинается перед символом в этой позиции, а не после него.)

Поэтому, чтобы получить «Ga» от «Gates», вы можете сделать это:

Full.substring (5, Full.length () - 3);       

Второе число теперь длина строки минус 3 символа. Длина строки - это количество символов в ней. «Bill Gates» имеет 10 символов, включая пробел. Уберите 3, и у вас будет 7. Итак, мы говорим, что substring начинается с символа 5 и заканчивается на 7.

И это было бы прекрасно для людей по имени «Bill Gates». Но программа не сработает, если вас зовут, скажем, «Billy Gates». Приведенный выше код будет содержать пробел плюс букву «G», а это совсем не то, что нам нужно. Мы хотим, чтобы программа работала независимо от того, какие два имени введены. Таким образом, мы можем сделать немного умнее.

Кое-что, что мы можем сделать, это отметить положение пробела в двух именах. 2 символа, которые мы хотим получить из второго имени, всегда идут сразу после символа пробела. Нам нужен код, который захватывает эти первые два символа после пробела.

Чтобы отметить позицию пробела, мы можем использовать indexOf:

int spacePos = Full.indexOf(" ");

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

Проверьте это, добавив строку выше к своему коду. После добавьте строку печати, чтобы проверить вывод (строки выделены внизу синим цветом):

package nameswapper;

public class NameSwap {

    public static void main(String[] args) {
        
        String Full = "Bill Gates";
        String NameChars = "";
        
        NameChars = Full.substring(0, 2);
        System.out.println(NameChars);
        
        int spacePos = Full.indexOf(" ");
        System.out.println("Пробел в позиции " + spacePos);
    }
}

Запустите программу, чтобы увидеть следующий вывод:

Результат позиции пробела

Таким образом, пробел находится в позиции 4 в нашей строке. Мы можем использовать этот факт, чтобы получить первые два символа «Gates» или любого другого имени.

Мы говорим Java начинать с первого символа после пробела и заканчивать после следующих двух символов:

Full.substring(spacePos + 1, (spacePos + 1) + 2)

Итак, два числа в круглых скобках substring:

spacePos + 1, (spacePos + 1) + 2

Мы хотим начать с первого символа после пробела (пробел + 1) и завершить два символа после этой позиции, то есть (пробел + 1) + 2.

Добавьте следующие строки в ваш код (те, которые выделены с новым методом substring):

package nameswapper;

public class NameSwap {

    public static void main(String[] args) {
        
        String Full = "Bill Gates";
        String NameChars = "";
        
        NameChars = Full.substring(0, 2);
        System.out.println(NameChars);
        
        int spacePos = Full.indexOf(" ");
        System.out.println("Пробел в позиции " + spacePos);
              
        String SurChars = "";
        SurChars = Full.substring(spacePos + 1, (spacePos + 1) + 2);

        System.out.println(SurChars);
    }
}

Когда вы запустите программу, окно вывода будет выглядеть так:

Результат Ga

Итак, теперь у нас есть «Bi» от Bill и «Ga» от Gates. Теперь нам нужно получить остальные символы из имени и фамилии, а затем поменять их местами.

Опять же, мы можем использовать substring, чтобы получить оставшиеся символы из имени:

String OtherNameChars = "";
OtherNameChars = Full.substring(2, spacePos);
System.out.println(OtherNameChars);

А остальные символы от фамилии:

String OtherSurChars = "";
OtherSurChars = Full.substring((spacePos + 1) + 2, Full.length());
        
System.out.println(OtherSurChars);

Чтобы получить остальные символы имени, это числа в круглых скобках substring:

2, spacePos

Это говорит Java, что мы хотим начать с позиции 2, и идти до позиции пробела. Но, чтобы получить оставшуюся часть фамилии, нужен немного сложнее код:

(spacePos + 1) + 2, Full.length()

(SpacePos1 + 1) + 2 - начальная позиция третьего символа фамилии. И мы хотим закончить на длине всей нашей строки.

Добавьте следующее в ваш код (выделено):

package nameswapper;

public class NameSwap {

    public static void main(String[] args) {
        
        String Full = "Bill Gates";
        String NameChars = "";
        
        NameChars = Full.substring(0, 2);
        System.out.println(NameChars);
        
        int spacePos = Full.indexOf(" ");
        System.out.println("Пробел в позиции " + spacePos);
        
        String SurChars = "";
        SurChars = Full.substring(spacePos + 1, (spacePos + 1) + 2);
        
        System.out.println(SurChars);
        
        String OtherNameChars = "";
        OtherNameChars = Full.substring(2, spacePos);
        System.out.println("Оставшаяся часть от имени: " + OtherNameChars);

        String OtherSurChars = "";
        OtherSurChars = Full.substring((spacePos + 1) + 2, Full.length());

        System.out.println("Оставшаяся часть от фамилии " + OtherSurChars);
    }
}

Выход такой:

Результат остальное

Теперь у нас есть все части имени и фамилии. Чтобы объединить их, мы можем использовать конкатенацию:

package nameswapper;

public class NameSwap {

    public static void main(String[] args) {
        
        String Full = "Bill Gates";
        String NameChars = "";
        
        NameChars = Full.substring(0, 2);
        System.out.println(NameChars);
        
        int spacePos = Full.indexOf(" ");
        System.out.println("Пробел в позиции " + spacePos);
        
        String SurChars = "";
        SurChars = Full.substring(spacePos + 1, (spacePos + 1) + 2);
        
        System.out.println(SurChars);
        
        String OtherNameChars = "";
        OtherNameChars = Full.substring(2, spacePos);
        System.out.println("Оставшаяся часть от имени: " + OtherNameChars);
        
        String OtherSurChars = "";
        OtherSurChars = Full.substring((spacePos + 1) + 2, Full.length());
        
        System.out.println("Оставшаяся часть от фамилии " + OtherSurChars);
        
        String NewName = "";
        NewName = SurChars + OtherNameChars + " " + NameChars + OtherSurChars;

        System.out.println("Новое имя = " + NewName);
    }
}

Добавьте новые строки в свой код. Когда вы запустите свою программу, в окне «Вывод» должно отображаться следующее:

Результат программы substring

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

package nameswapper;
import java.util.Scanner;

public class NameSwap {

    public static void main(String[] args) {
        
        Scanner user_input = new Scanner(System.in, "Cp1251");
        
        System.out.println("Введите Имя и Фамилию: ");
        String Full = user_input.nextLine();
        
        String NameChars = "";
        NameChars = Full.substring(0, 2);
        
        int spacePos = Full.indexOf(" ");
        String SurChars = "";
        SurChars = Full.substring(spacePos + 1, (spacePos + 1) + 2);
        
        String OtherNameChars = "";
        OtherNameChars = Full.substring(2, spacePos);
        
        String OtherSurChars = "";
        OtherSurChars = Full.substring((spacePos + 1) + 2, Full.length());
        
        String NewName = "";
        NewName = SurChars + OtherNameChars + " " + NameChars + OtherSurChars;
        
        System.out.println("Ваше новое имя = " + NewName);
    }
}

Окно «Вывод» должно выглядеть примерно так, когда вы запустите программу и введете имя и фамилию:

Результат программы input substring

Конечно, мы должны добавить проверку ошибок. Но здесь мы предполагаем, что пользователь может ввести имя и фамилию с пробелом между ними. Если нет, программа выдаст ошибку!

Давайте продолжим и ознакомимся с методом equals.

Дата обновления: 11.08.2019

  • Текущий 0.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

/Рейтинг: 0.0/5 (0 голос(ов) всего)

Добавить комментарий (без регистрации)