Найти значение в строке Java

241
03 марта 2018, 20:20

Предположим что у нас есть текстовик, в котором текст вида: Number = 1 Vasya Number = 2 Valera Number = 3 Kolya

Нужно перевести текст в строку(это не проблема) и найти все номера, желательно только те что идут после "Number = ", и записать в переменные/массив, не суть, перешерстил гугл, ниче не нашел(мб я тупой). Помогите, как решить?

Answer 1

Можно сделать следующее:

  1. Делим всю строку, используя "Number = " как разделитель.
  2. В каждой получившейся подстроке вида "1 Vasya" забираем часть до пробела и преобразовываем ее к Integer.
  3. Складываем это все в массив.

Код:

// Наш текст
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....

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

Answer 2
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);
    }
}
READ ALSO
Ошибка Java:modifier &#39;static&#39; is only allowed in constant variable declarations

Ошибка Java:modifier 'static' is only allowed in constant variable declarations

Консоль с сайта codefights,подключенные библиотеки по умолчанию:

213
Деплой проекта Idea Ultimate на GlassFish

Деплой проекта Idea Ultimate на GlassFish

Для упрощения тестирования сделал примитивное клиент-серверное приложениеСервер на Java + web клиент на HTML+JS

187