Предположим что у нас есть текстовик, в котором текст вида: Number = 1 Vasya Number = 2 Valera Number = 3 Kolya
Нужно перевести текст в строку(это не проблема) и найти все номера, желательно только те что идут после "Number = ", и записать в переменные/массив, не суть, перешерстил гугл, ниче не нашел(мб я тупой). Помогите, как решить?
Можно сделать следующее:
"Number = "
как разделитель."1 Vasya"
забираем часть до пробела и преобразовываем ее к Integer
.Код:
// Наш текст
String text = "Number = 1 Vasya Number = 2 Valera Number = 3 Kolya";
// Делим его, используя разделитель
String substrings[] = text.split("Number\\s*=\\s*");
// Создаем пустую коллекцию
ArrayList<Integer> arrayList = new ArrayList<>();
// Проходимся по получившимся подстрокам
for (int i = 1; i < substrings.length; ++i) {
String str = substrings[i];
arrayList.add(new Integer(str.substring(0, str.indexOf(' '))));
}
// Выводим arrayList на экран
arrayList.forEach(System.out::println);
// Если нужно после создать массив примитивов:
int numbers[] = new int[arrayList.size()];
for (int i = 0; i < numbers.length; ++i) {
numbers[i] = arrayList.get(i);
}
Я использовал в качестве разделителя "Number\\s*=\\s*"
для того, чтобы все работало, даже если у вас перед знаком =
или после не стоит пробелов, или же стоит их несколько.
Вот тут вот:
new Integer(str.substring(0, str.indexOf(' ')))
Мы берем одну из подстрок, и "выдираем" из нее часть с самого начала и до первого пробела. После создаем экземпляр Integer
, используя конструктор, принимающий строку как параметр.
Проходимся же в цикле мы начиная с подстроки 1
, т.к. нулевая будет либо пустой, либо содержать текст, предшествующий нужным нам Number...
.
И еще. Если вы хотите сделать что-то более универсальное, чтобы находить такие вхождения в разных местах произвольного текста, то вам нужно использовать более сложные регулярные выражения, которые вам вряд ли кто-то просто возьмет и напишет. Так что изучайте теорию про регулярки...
package com.company;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
//текстовик
File file = new File("C:\\text.txt");
//строка
String s = "";
Scanner sc = new Scanner(file);
while (sc.hasNext())
String s=sc.next();
//разделитель
String i = "Number = ";
//массив
List<String> array = new ArrayList<>();
//Собственно алгоритм
while (s.contains(i)) {
array.add(""+s.charAt(s.indexOf(i) + i.length()));
s = s.substring(s.indexOf(i)+i.length()+1);
}
//вывод массива
System.out.println(array);
}
}
Консоль с сайта codefights,подключенные библиотеки по умолчанию:
Для упрощения тестирования сделал примитивное клиент-серверное приложениеСервер на Java + web клиент на HTML+JS