Вспомогательные классы для работы со строками в java

How to the limit number of string parts returned by the split method?

Use the overloaded method which accepts a limit parameter to limit the number of matches returned by the method.


1 publicStringsplit(Stringregex,intlimit)

The limit parameter denotes the number of times the pattern is applied on a string and thus the length of the resulting array.

1 2 3 4 5 6 7 8

Stringstr=»Java,String,Split,Example»;

  //here, we want only two parts, so limit is 2

Stringparts=str.split(«,»,2);

for(Stringpartparts){

System.out.println(part);

}

Output

1 2 Java String,Split,Example

Please note that the passing limit as 0 is the same as calling the method without the limit parameter.

Конструктор в Java

В Java конструктор инициализирует объект при его создании. Его имя аналогично имени класса, а синтаксис сходен с синтаксисом метода. Однако, в отличие от последнего, в конструкторе отсутствует возвращаемое значение.

Как правило, конструктор в Java может использоваться для присвоения исходного значения переменных экземпляра, определяемых классом, либо для выполнения каких-либо иных процедур запуска, необходимых для создания полностью сформированного объекта.

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

Пример

В примере ниже рассмотрено использование конструктора класса без параметров.

Для инициализации объектов вам необходимо выполнить вызов конструктора согласно следующему примеру.

Получим результат:

Проверка, равны ли массивы Arrays.equals()

Класс java.util.Arrays содержит набор методов, называемых equals(), которые можно использовать для проверки, равны ли два массива. Два массива считаются равными, если имеют одинаковую длину, а элементы равны друг другу в порядке их нахождения в массиве. Пример:

int[] ints1 = {0,2,4,6,8,10};
int[] ints2 = {0,2,4,6,8,10};
int[] ints3 = {10,8,6,4,2,0};

boolean ints1EqualsInts2 = Arrays.equals(ints1, ints2);
boolean ints1EqualsInts3 = Arrays.equals(ints1, ints3);

System.out.println(ints1EqualsInts2);
System.out.println(ints1EqualsInts3);

В этом примере сравнивается массив ints1 с массивами ints2 и ints3. Первое сравнение приведет к значению true, поскольку ints1 и ints2 содержат одинаковые элементы в одинаковом порядке. Второе сравнение приведет к значению false. Массив ints1 содержит те же элементы, что и ints3, но не в том же порядке. Поэтому два массива не считаются равными.

Joining Strings With the Stream API

Let’s use the Stream API to create a function which would join a String array into a comma-separated String:

Points to note here:

  • The stream() function converts any Collection into a stream of data
  • map() function is used to process the data
  • There is also another function, named filter(), where we can include filtering criteria

There can be scenarios, where we may want to join a String with some fixed prefix and postfix. With the Stream API we can do that in the following way:

As we can see in the Collectors.joining() method, we are declaring our prefix as ‘’; hence the generated String will be created with declared format.

Присоединение, объединение или добавление строк в Java

Самый простой способ объединить строки в Java — это использовать +. Это работает так:

String text1 = "Hello";

String text2 = "Jim";

System.out.println(text1 + " " + text2);

Однако это не очень эффективно, потому что каждый раз, когда вы пишете +, вы создаете новый объект String. По этой причине вы можете использовать StringBuilder или более старую поточно-ориентированную версию StringBuffer.

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" to");
sb.append(" you");
System.out.println(sb.toString());

Более того, поскольку append() возвращает ссылку на сам объект StringBuilder, мы можем написать что-то вроде этого с тем же эффектом:

StringBuilder sb = new StringBuilder();
sb.append("Hello")
.append(" to")
.append(" you");
System.out.println(sb.toString());

Подстрока Java: выбор частей строк

Чтобы получить часть строки, используйте метод substring.

String substring(int beginIndex, int endIndex)

Длина выбранной подстроки равна endIndex — startIndex.

Вот несколько примеров.

String text = "The quick brown fox";
// Everything from index 4 onwards
System.out.println(text.substring(4));
// Index 0 up to but not including index 3.
System.out.println(text.substring(0, 3));

Java Array String: объединение массивов строк

Удивительно, но в ядре Java нет способа объединения массивов строк, хотя такие методы существуют в различных библиотеках.

Вы всегда можете создать свои собственные. Следующий класс объявляет именно такой метод и использует его для соединения массива строк. Вы можете легко адаптировать это для работы с ArrayList или Vector или чем-то еще.

package caveofprogramming.aquarium;
package caveofprogramming.aquarium;

import java.util.*;

public class Test {
    public static String join(String[] strings, String glue) {
    
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i < strings.length; i++) {
            sb.append(strings);
            
            if(i < strings.length - 1) {
                sb.append(glue);
            }
        }
        
        return sb.toString();
    }
    
    public static void main(String [] args) {

        String texts[] = {"Hello", "to", "you"};
        System.out.println(join(texts, " "));
    }
}

Java String Split: разделение строк

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

Давайте посмотрим на некоторые примеры.

Чтобы разделить пробелом (это также работает для вкладок):

String text = "The quick brown fox";
String text = "The quick brown fox";
        
// Split on whitespace
String [] tokens = text.split("\s+");
        
for(int i=0; i < tokens.length; i++) {
    System.out.println(tokens);
}

Разделим электронный адрес на части

String text = "someone@nowhere.com";

// Split on @ and .
// The double backslashes make this regular
// expression look more confusing than it is.
// We are escaping once for the sake of the
// regex, and again for the sake of Java.
String [] tokens = text.split("+");

for(int i=0; i < tokens.length; i++) {
    System.out.println(tokens);
}

Удаление элементов

Код для удаления элемента из массива:

int[] ints   = new int;

ints = 123;

int removeIndex = 10;

for(int i = removeIndex; i < ints.length -1; i++){
    ints = ints;
}

В этом примере сначала создается массив int. Затем он устанавливает значение элемента с индексом 10 равным 123. Потом пример удаляет элемент с индексом 10, перемещая все элементы ниже индекса 10 на одну позицию вверх в массиве. После удаления последний элемент в массиве будет существовать дважды. И в последнем, и во втором последнем элементе.

Приведенный выше код может быть встроен в метод. Вот как мог бы выглядеть такой Java-метод удаления массива:

public void removeFromArray(
    int[] array, int removeIndex){

    for(int i = removeIndex; i < array.length -1; i++){
        array = array;
    }
}

Метод removeFromArray() принимает два параметра: массив для удаления элемента и индекс удаляемого элемента.

Конечно, если метод removeFromArray() находится в другом классе, нежели приведенный выше код, вам потребуется объект этого класса, чтобы вызывать метод. Или, если метод removeFromArray() был статическим, вам нужно поместить имя класса и точку перед именем метода.

Java String split Example

public class SplitExample{
   public static void main(String args[]){
	// This is out input String
	String str = new String("28/12/2013");
	       
	System.out.println("split(String regex):");
	/* Here we are using first variation of java string split method
	 * which splits the string into substring based on the regular
	 * expression, there is no limit on the substrings
	 */
	String array1[]= str.split("/");
	for (String temp: array1){
	      System.out.println(temp);
	}
	       
	/* Using second variation of split method here. Since the limit is passed 
	 * as 2. This method would only produce two substrings. 
	 */
	System.out.println("split(String regex, int limit) with limit=2:");
	String array2[]= str.split("/", 2);
	for (String temp: array2){
	      System.out.println(temp);
	}
	       
	System.out.println("split(String regex, int limit) with limit=0:");
	String array3[]= str.split("/", 0);
	for (String temp: array3){
	      System.out.println(temp);
	}
	       
	/* When we pass limit as negative. The split method works same as the first variation
	 * because negative limit says that the method returns substrings with no limit.
	 */
	System.out.println("split(String regex, int limit) with limit=-5:");
	String array4[]= str.split("/", -5);
	for (String temp: array4){
	      System.out.println(temp);
	}
   }
}

Output:

split(String regex):
28
12
2013
split(String regex, int limit) with limit=2:
28
12/2013
split(String regex, int limit) with limit=0:
28
12
2013
split(String regex, int limit) with limit=-5:
28
12
2013

Java String split

Sometimes we have to split String in Java, for example splitting data of CSV file to get all the different values.

String class provides two useful methods to split a string in java.

  1. : This java string split method is used to split the string based on the given regular expression string. The whole string is split and returned in the form of a string array. This method was introduced in Java 1.4. Notice that the trailing empty strings are not included in the returned string array. Let’s look at a simple java string split example to understand this.

    Above code will produce output as . Notice that the last empty string is excluded from the returned string array.

  2. : This java string split method is used when we want the string to be split into a limited number of strings. For example, let’s say we have a String variable that contains name and address with comma as a delimiter. Now, the address can have commas in them, so we can use this method. A short example of this string split is given below.

Note that the first method above actually utilizes the second method by passing limit as 0.

Java String split important points

Some important points about java String split method are:

  • The array returned by this method contains each substring of this string that is terminated by another substring that matches the given expression or is terminated by the end of the string. The substrings in the array are in the order in which they occur in this string.
  • If the regex doesn’t match any part of the input string then the resulting array has just one element, namely this string.
  • The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n – 1 time, the array’s length will be no greater than n, and the array’s last entry will contain all input beyond the last matched delimiter.

    If n is non-positive then the pattern will be applied as many times as possible and the array can have any length.

    If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.

Java String split example

Here is an example of java String split method.

Below image shows the output produced by the above String split example program.

We can use a backslash to use java regular expression special characters as normal characters like I have used pipe (|) special character in the above program.

That’s all for a quick roundup on java string split example.

Reference:

Побитовые операторы

Java определяет несколько побитовых операторов, которые могут быть применены для целочисленных типов: int, long, short, char и byte. В Java побитовый оператор работает над битами и выполняет операцию бит за битом. Предположим, если a = 60; и b = 13; то в двоичном формате они будут следующие:

a = 0011 1100

b = 0000 1101

——————

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a = 1100 0011

Предположим целочисленные переменная A равна 60, а переменная B равна 13. В следующей таблице перечислены побитовые операторы в Java:

Оператор Описание Пример
& (побитовое и) Бинарный оператор AND копирует бит в результат, если он существует в обоих операндах. (A & B) даст 12, который является 0000 1100
| (побитовое или) Бинарный оператор OR копирует бит, если он существует в любом из операндов. (A | B) даст 61 который равен 0011 1101
^ (побитовое логическое или) Бинарный оператор XOR копирует бит, если он установлен в одном операнде, но не в обоих. (A ^ B) даст 49, которая является 0011 0001
~ (побитовое дополнение) Бинарный оператор дополнения и имеет эффект «отражения» бит. (~ A) даст -61, которая является формой дополнением 1100 0011 в двоичной записи
Бинарный оператор сдвига влево. Значение левых операндов перемещается влево на количество бит, заданных правым операндом. A
>> (сдвиг вправо) Бинарный оператор сдвига вправо. Значение правых операндов перемещается вправо на количество бит, заданных левых операндом. A >> 2 даст 15, который является 1111
>>> (нулевой сдвиг вправо) Нулевой оператор сдвига вправо. Значение левых операндов перемещается вправо на количество бит, заданных правым операндом, а сдвинутые значения заполняются нулями. A >>> 2 даст 15, который является 0000 1111

Пример

Следующий простой пример показывает, программно побитовые операторы в Java. Скопируйте и вставьте следующий java-код в файл test.java, скомпилируйте и запустить эту программу:

Будет получен следующий результат:

Java String split with multiple delimiters (special characters)

Lets see how we can pass multiple delimiters while using split() method. In this example we are splitting input string based on multiple special characters.

public class JavaExample{
   public static void main(String args[]){
	String s = " ,ab;gh,bc;pq#kk$bb";
	String[] str = s.split("");
		
	//Total how many substrings? The array length
	System.out.println("Number of substrings: "+str.length);
		
	for (int i=0; i < str.length; i++) {
		System.out.println("Str:"+str);
	}
   }
}

Lets practice few more examples:

Example: word as a regular expression in Java String split method

public class SplitExample1 { 
    public static void main(String args[]) 
    { 
        String str = "helloxyzhixyzbye"; 
        String[] arr = str.split("xyz"); 
  
        for (String s : arr) 
            System.out.println(s); 
    } 
}

Output:

hello
hi
bye

Example: splitting string based on whitespace

public class SplitExample2 { 
    public static void main(String args[]) 
    { 
        String str = "My name is Chaitanya";
        //regular expression is a whitespace here 
        String[] arr = str.split(" "); 
  
        for (String s : arr) 
            System.out.println(s); 
    } 
}

Output:

My
name
is
Chaitanya


❮ PreviousNext ❯

Поиск с помощью Arrays.binarySearch()

Класс Arrays содержит набор методов с именем binarySearch(). Этот метод поможет вам выполнить бинарный поиск в массиве. Сначала массив должен быть отсортирован. Вы можете сделать это самостоятельно или с помощью метода Arrays.sort(), описанного ранее в этом тексте. Вот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 6);

System.out.println(index);

Вторая строка этого примера ищет в массиве значение 6. Метод binarySearch() возвращает индекс в массиве, в котором был найден элемент. В приведенном выше примере метод binarySearch() вернет 3.

Если в массиве существует более одного элемента с искомым значением, нет гарантии, какой элемент будет найден.

Если элемент с данным значением не найден, будет возвращено отрицательное число. Отрицательным числом будет индекс, по которому будет вставлен искомый элемент, а затем минус один. Посмотрите на этот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 7);

System.out.println(index);

Число 7 не найдено в массиве. Номер 7 должен был быть вставлен в массив по индексу 4, если 7 должен был быть вставлен в массив (и порядок сортировки сохранен). Следовательно, binarySearch() возвращает -4 – 1 = -5.

Если все элементы в массиве меньше искомого значения, то двоичная Search() вернет – длина массива – 1. Посмотрите на этот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 12);

System.out.println(index);

В этом примере мы ищем 12 в массиве, но все элементы в массиве меньше 12. Поэтому binarySearch() вернет -length(-6) – 1 = -6 -1 = -7.

Метод Arrays.binarySearch() для поиска части массива. Вот как это выглядит:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 0, 4, 2);

System.out.println(index);

В этом примере выполняется поиск в массиве значения 2, но только между индексами 0 и 4 (без 4).

Эта версия binarySearch() работает так же, как и другая версия, за исключением случаев:

  • Если не найдено ни одного элемента, совпадающего в пределах интервала индекса, то все равно вернется индекс того места, где должно было быть вставлено значение.
  • Если все значения в интервале меньше искомого значения, вернется -toIndex -1, а не -array length – 1.

Таким образом, этот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 0, 4, 12);

вернет -5, а не -7, как в двоичном поиске (целых, 12).

Добавление элементов

Чтобы добавить элементы с помощью splice ( ), необходимо ввести их в качестве третьего, четвертого и пятого элемента (в зависимости от того, сколько элементов нужно добавить):

array.splice(index, number of elements, element, element);

В качестве примера, добавим элементы a и b в самое начало массива:

array.splice(0, 0, 'a', 'b');

Элементы a и b добавлены в начало массива

Split ( )

Методы Slice( ) и splice( ) используются для массивов. Метод split( ) используется для строк. Он разделяет строку на подстроки и возвращает их в виде массива. У этого метода 2 параметра, и оба из них не обязательно указывать.

string.split(separator, limit);
  • Separator: определяет, как строка будет поделена на подстроки: запятой, знаком и т.д.
  • Limit: ограничивает количество подстрок заданным числом

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

Давайте посмотрим, как это работает.

Сначала преобразуем массив в строку с помощью метода toString( ):

let myString = array.toString();

Затем разделим строку myString запятыми и ограничим количество подстрок до трех. Затем преобразуем строки в массив:

let newArray = myString.split(",", 3);

В виде массива вернулись первые 3 элемента

Таким образом, элементы массива myString разделены запятыми. Мы поставили ограничение в 3 подстроки, поэтому в качестве массива вернулись первые 3 элемента.

Все символы разделены на подстроки

Сортировка объектов

Показанный ранее пример Arrays.sort() работает только для массивов примитивных типов данных, которые имеют порядок:

  • естественный;
  • числовой;
  • символьный в таблице ASCII (двоичное число, представляющее символ).

У объектов может не быть естественного порядка сортировки, поэтому вам нужно предоставить другой объект, который может определять порядок ваших объектов. Такой объект называется компаратором – это интерфейс.

Вот первый класс для объектов, которые мы хотим отсортировать:

private static class Employee{
    public String name;
    public int    employeeId;

    public Employee(String name, int employeeId){
        this.name       = name;
        this.employeeId = employeeId;
    }
}

Класс Employee – это простая модель сотрудника, у которого есть имя и идентификатор. Вы можете отсортировать массив объектов Employee по имени или по идентификатору сотрудника.

Вот первый пример сортировки массива объектов Employee по их имени с помощью метода Arrays.sort():

Employee[] employeeArray = new Employee;

employeeArray = new Employee("Xander", 1);
employeeArray = new Employee("John"  , 3);
employeeArray = new Employee("Anna"  , 2);

java.util.Arrays.sort(employeeArray, new Comparator() {
    @Override
    public int compare(Employee e1, Employee e2) {
        return e1.name.compareTo(e2.name);
    }
});


for(int i=0; i < employeeArray.length; i++) {
    System.out.println(employeeArray.name);
}
  1. Сначала объявляется массив.
  2. Три объекта Employee создаются и вставляются в массив.
  3. Метод Arrays.sort() вызывается для сортировки массива. В качестве параметра передаем массив employee и реализацию Comparator, которая может определять порядок объектов Employee. Это создает анонимную реализацию интерфейса Comparator.

В примере важно уловить реализацию метода compare() анонимной внутренней реализации интерфейса Comparator. Этот метод возвращает:

  • положительное число, если первый объект «больше»(позже в порядке сортировки), чем второй объект;
  • 0 – они «равны»(в порядке сортировки);
  • отрицательное число, если первый объект «меньше» (ранее в порядке сортировки), чем второй объект.

В приведенном выше примере мы просто вызываем метод String.compare(), который выполняет для нас сравнение (сравнивает имена сотрудников).

После сортировки массива мы перебираем его и выводим имена сотрудников. Вывод:

Anna
John
Xander

Обратите внимание, как порядок был изменен по сравнению с порядком, в котором они были первоначально вставлены в массив. Сортировка объектов Employee по их идентификатору сотрудника на основании предыдущего примера с измененной реализацией метода compare() анонимной реализации интерфейса Comparator:

Сортировка объектов Employee по их идентификатору сотрудника на основании предыдущего примера с измененной реализацией метода compare() анонимной реализации интерфейса Comparator:

Employee[] employeeArray = new Employee;

employeeArray = new Employee("Xander", 1);
employeeArray = new Employee("John"  , 3);
employeeArray = new Employee("Anna"  , 2);

java.util.Arrays.sort(employeeArray, new Comparator() {
    @Override
    public int compare(Employee e1, Employee e2) {
        return e1.employeeId - e2.employeeId;
    }
});

for(int i=0; i < employeeArray.length; i++) {
    System.out.println(employeeArray.name);
}

Вывод:

Xander
Anna
John

Чтобы сравнить объекты Employee в массиве сначала по их имени, а если оно совпадает, то по их идентификатору сотрудника, реализация compare():

java.util.Arrays.sort(employeeArray, new Comparator() {
    @Override
    public int compare(Employee e1, Employee e2) {
        int nameDiff = e1.name.compareTo(e2.name);
        if(nameDiff != 0) { return nameDiff; }
    
        return e1.employeeId - e2.employeeId;
    }
});

Разделение

Класс Java String содержит метод split(), который можно использовать для разделения String на массив объектов String:

String   source = "A man drove with a car.";
String[] occurrences = source.split("a");

После выполнения этого кода Java массив вхождений будет содержать экземпляры String:

"A m"
"n drove with "
" c"
"r."

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

Параметр, передаваемый методу split(), на самом деле является регулярным выражением Java, которые могут быть довольно сложными. Приведенное выше соответствует всем символам, даже буквам нижнего регистра.

Метод String split() существует в версии, которая принимает ограничение в качестве второго параметра – limit:

String   source = "A man drove with a car.";
int      limit  = 2;
String[] occurrences = source.split("a", limit);

Параметр limit устанавливает максимальное количество элементов, которое может быть в возвращаемом массиве. Если в строке больше совпадений с регулярным выражением, чем заданный лимит, то массив будет содержать совпадения с лимитом – 1, а последним элементом будет остаток строки из последнего среза – 1 совпадением. Итак, в приведенном выше примере возвращаемый массив будет содержать эти две строки:

"A m"
"n drove with a car."

Первая строка соответствует регулярному выражению. Вторая – это остальная часть строки после первого куска.

Выполнение примера с ограничением 3 вместо 2 приведет к тому, что эти строки будут возвращены в результирующий массив String:

"A m"
"n drove with "
" car."

Обратите внимание, что последняя строка по-прежнему содержит символ в середине. Это потому, что эта строка представляет остаток строки после последнего совпадения (a после ‘n водил с’)

Выполнение приведенного выше примера с пределом 4 или выше приведет к тому, что будут возвращены только строки Split, поскольку в String есть только 4 совпадения с регулярным выражением a.

String split(String regex, int limit) Example

This version of the method also splits the string, but the maximum number of tokens can not exceed argument. After the method has found given the number of tokens, the rest of the unsplitted string is returned as the last token, even if it may contain the delimiters.

Below given is a Java program to split a string by space in such as the way the maximum number of tokens can not exceed .

public class StringExample 
{
    public static void main(String[] args) 
    {
        String str = "how to do in java provides java tutorials";
        
        String[] strArray = str.split("\\s", 5);
        
        System.out.println(strArray.length);	//5
        System.out.println(Arrays.toString(strArray));
    }
}

Program output.

5


Happy Learning !!

Заполнение Arrays.fill()

Класс Arrays имеет набор методов с именем fill(), которые могут заполнять массив заданным значением. Это проще, чем перебирать массив и вставлять значение самостоятельно. Вот пример использования Arrays.fill() для заполнения массива int:

int[] intArray = new int;

Arrays.fill(intArray, 123);

System.out.println(Arrays.toString(intArray));

В этом примере создается массив int и заполняется значение 123 во всех элементах массива. Последняя строка примера преобразует массив в строку и выводит его на консоль:

Существует версия метода Arrays.fill(), которая принимает значения from и to index, поэтому только элементы с индексами в этом интервале заполняются заданным значением:

int[] intArray = new int;

Arrays.fill(ints2, 3, 5, 123) ;

System.out.println(Arrays.toString(intArray));

Этот пример заполняет только те элементы, которые имеют индексы 3 и 4(от 3 до 5 без 5) значением 123. Вывод:

0, 0, 0, 123, 123, 0, 0, 0, 0, 0]

Поиск с помощью 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”.

Метод splice

Метод Array.splice() — это универсальный метод для работы с массивами. Он изменяет массив на месте, а не возвращает новый измененный массив, как это делают методы slice() и concat(). Метод splice может удалять элементы из массива, вставлять новые элементы, заменять элементы — по очереди и одновременно. Он возвращает массив, состоящий из удаленных элементов, если ни один из элементов не был удален, вернет пустой массив.

Синтаксис метода:

имя_массива.splice(index , кол-во, elem1, ..., elemN);

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

var fruits = ;

var deleted = fruits.splice(2,2);  //возвращает 
document.write(deleted);
			
var arr = ;

arr.splice(4);    //Возвращает ; массив стал: 
arr.splice(1,2);  //Возвращает ; массив стал: 
arr.splice(1,1);  //Возвращает ; массив стал: 

Попробовать »

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

var fruits = ;

fruits.splice(2,0, "арбузы");  //возвращает []
document.write(fruits);  //стало 
			
var arr = ;

arr.splice(2,0,'a','b'); //Возвращает []; стало 
arr.splice(2,2,);   //Возвращает ; стало ,3,4,5]

Попробовать »

Стоит обратить внимание, что в отличие от concat(), метод splice() не разбивает на отдельные элементы массивы, передаваемые в качестве аргументов. То есть, если методу передается массив для вставки, он вставляет сам массив, а не элементы этого массива


С этим читают