Java - вырезать строку заданным образом c - PullRequest
3 голосов
/ 21 февраля 2020

У меня есть строка (взято из файла):

Компьютер: intel, graphi c Карта: Nvidia,

Мышь: razer, цвет: белый et c.

Мне нужно взять слова между ":" и ",".

Когда я делаю это таким образом

Scanner sc = new Scanner(new File(path));
    String str = sc.nextLine();

    ArrayList<String> list = new ArrayList<String>();

    while (sc.hasNextLine()) {

        for (int i = 0; i < str.length(); i++) {
            list.add(str.substring(str.indexOf(":"), str.indexOf(",")));
        }
        System.out.println("test");

        sc.nextLine();

    }

Я беру только ": intel". Я не знаю, как взять больше слов из той же строки и их слова из следующей строки.

Ответы [ 6 ]

1 голос
/ 21 февраля 2020

Вы столкнулись с этой проблемой, потому что функция indexof () возвращает первое вхождение этого символа в строке. Следовательно, вы получаете подстроку между первым вхождением ':' и первым вхождением ','. Чтобы решить вашу проблему, используйте функции FirstIndexOf () и LastIndexOf () с str.substring вместо функции IndexOf (). Это вернет подстроку между первым вхождением ':' и последним вхождением ','. Я надеюсь, что вы найдете этот ответ полезным.

0 голосов
/ 21 февраля 2020

Вечнозеленое решение:

String string = "Computer: intel, graphic card: Nvidia,";

Map<String,String> map = Pattern.compile("\\s*,\\s*")
    .splitAsStream(string.trim())
    .map(s -> s.split(":", 2))
    .collect(Collectors.toMap(a -> a[0], a -> a.length>1? a[1]: ""));
System.out.println(map.values());

Выход:

[ Nvidia,  intel]
0 голосов
/ 21 февраля 2020

Исходя из содержимого файла, test.txt выглядит следующим образом:

Computer: intel, graphic card: Nvidia
Mouse: razer, color: white

Следующая программа будет

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

class Coddersclub {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner sc = new Scanner(new File("test.txt"));
        ArrayList<String> list = new ArrayList<String>();
        String str = "";
        while (sc.hasNextLine()) {
            str = sc.nextLine();
            String[] specs = str.split(",");
            for (String item : specs) {
                list.add(item.substring(item.indexOf(":") + 1).trim());
            }
        }
        System.out.println(list);
    }
}

выводить:

[intel, Nvidia, razer, white]

Примечание: , если вы ищете для списка [: intel, : Nvidia, : razer, : white], замените list.add(item.substring(item.indexOf(":") + 1).trim()); на list.add(item.substring(item.indexOf(":")).trim());.

Не стесняйтесь комментировать, если вы ищете что-то еще.

0 голосов
/ 21 февраля 2020

Я думаю, чтобы получить все ключи между ':' и ',' было бы хорошо разделить каждую строку на ',' и каждый элемент строки на ':', а затем получить значение правой руки.

Пожалуйста, попробуйте этот код:

Scanner sc;
    try {
        sc = new Scanner(new File(path));

    ArrayList<String> list = new ArrayList<String>();
    while (sc.hasNextLine()) {
        String informations = sc.nextLine();
        String[] parts = informations.split(",");
        for( String part : parts) {
            list.add(part.substring(part.indexOf(':')+1));
        }
    }
    }
     catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
0 голосов
/ 21 февраля 2020

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

Scanner sc = new Scanner(new File(path));

    ArrayList<String> list = new ArrayList<String>();

    while (sc.hasNextLine()) {
        String str = sc.nextLine();

         String[] sp = testString.split(",");

        for(int i=0;i<sp.length;i++){
            list.add(sp[i].split(":")[1]);
        }
    }

// вы получите список как intel, nvdia, razor et c ..

0 голосов
/ 21 февраля 2020

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

(?<=\:)(.*?)(?=\,\n)

Затем вы можете выполнить такую ​​операцию:

String mytext = "Computer: intel, graphic card: Nvidia,\n" + 
                  "Mouse: razer, color: white etc.";
Pattern pattern = Pattern.compile("(?<=\:)(.*?)(?=\,\n)");
Matcher matcher = pattern.matcher(mytext);
if (matcher.find())
{
    System.out.println(matcher.group(1));
}

Вывод будет:

 intel, graphic card: Nvidia

Вдохновлен этим и этим другим потоками.

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