Чтение значений из раздела комментариев в Java - PullRequest
0 голосов
/ 07 февраля 2020

У меня Комментарий в качестве входных данных, мне нужно извлечь значения из этого. Как я могу достичь этого?

Ввод Комментарий = "сервис-обслуживание, мне сообщили об отзыве подушки безопасности. Когда я могу забронировать? Сделать: Nissan \ nМодель: X-TRAIL \ nSeries: T324 \ nОписание: X-TRAIL Описание \ nBodyType: 4X4 \ n ";

Мне нужно извлечь Марка, Модель, Серия, Описание, BodyType из этого ввода.

Примечание: если значения отсутствуют, это должно быть Пусто.

// Reading Make value from Comment Section
String makevalue = comments.contains("Make :") ? comments.substring(comments.lastIndexOf("Make :"), comments.indexOf("Model :")) : "";
make = makevalue.length() > 0 ? makevalue.substring(makevalue.lastIndexOf(":") + 1) : "";
System.out.println(" Make is ::::::: " + make);
// Reading Model value from Comment Section
String modelvalue = comments.contains("Model :") ? comments.substring(comments.lastIndexOf("Model :"), comments.indexOf("Series :")) : "";
model = modelvalue.length() > 0 ? Modelvalue.substring(modelvalue.lastIndexOf(":") + 1) : "";
System.out.println(" Model is ::::::: " + model);
// Reading Description value from Comment Section
String descvalue = comments.contains("Description :") ? comments.substring(comments.lastIndexOf("Description :"), comments.indexOf("BodyType :")) : "";
description = descvalue.length() > 0 ? descvalue.substring(descvalue.lastIndexOf(":") + 1) : "";
System.out.println(" Description is ::::::: " + description);

Этот пример кода работает, когда все значения представлены в одном и том же порядке (Марка, Модель, Серия, Описание, Тип тела)

Есть ли эффективный способ для достижения этой цели?

Ответы [ 3 ]

2 голосов
/ 07 февраля 2020

Я бы сделал это с помощью регулярного выражения:

    String comment= "service-maintenance,I have been contacted about an airbag recall. When can I book?Make : Nissan\nModel : X-TRAIL\nSeries : T324\nDescription : X-TRAIL Desc\nBodyType : 4X4\n";
    String pattern = "Make : (.*)\nModel : (.*)\nSeries : (.*)\nDescription : (.*)\nBodyType : (.*)\n";

    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(comment);

    if (m.find( )) {
        //System.out.println(m.group(0));
        System.out.println("Make: "+m.group(1));
        System.out.println("Model: "+m.group(2));
        System.out.println("Series: "+m.group(3));
        System.out.println("Description: "+m.group(4));
        System.out.println("BodyType: "+m.group(5));
     }else {
        System.out.println("NO MATCH");
     }

Вывод:

Make: Nissan
Model: X-TRAIL
Series: T324
Description: X-TRAIL Desc
BodyType: 4X4

Если вы раскомментируете первый сисо, вы получите такой вывод:

Make : Nissan
Model : X-TRAIL
Series : T324
Description : X-TRAIL Desc
BodyType : 4X4

РЕДАКТИРОВАТЬ: Дополнительное решение для анализа необязательных параметров

    String comment= "service-maintenance,I have been contacted about an airbag recall. When can I book?Make : Nissan\nModel : X-TRAIL\nSeries : T324\nDescription : X-TRAIL Desc\nBodyType : 4X4\n";
    String pattern = "(Make|Model|Series|Description|BodyType) : (.*)\n";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(comment);

    while (m.find()) {
        //System.out.println(m.group(0));
        System.out.println(m.group(1) + "=" + m.group(2));
     }

Теперь вывод:

Make=Nissan
Model=X-TRAIL
Series=T324
Description=X-TRAIL Desc
BodyType=4X4

И такой же вывод будет, если, если раскомментировать syso строку. И, конечно, вы можете удалить некоторые параметры, и все должно работать как положено. Если все параметры удалены, вывод будет пустым.

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

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

public static final int MAKE_LENGHT = ("Make : ").length(); String make = string[0].substring(makeTitle);

Результат: make = "Nissan"

0 голосов
/ 07 февраля 2020
  1. Вы можете сначала разделить на основе ?, что даст мне входные параметры.
  2. Затем разделить на основе \n, это даст мне массив параметров
  3. Разделить на основе :, чтобы получить кет и пару значений.
    Примечание Это очень точное решение c для данного комментария, любые изменения в нем могут нарушить код.

    String comment = "service-maintenance,I have been contacted about an airbag recall. When can I book?Make : Nissan\nModel : X-TRAIL\nSeries : T324\nDescription : X-TRAIL Desc\nBodyType : 4X4\n";
    
    String[] arr = comment.split("\\?");
    String[] newArr =  arr[1].split("\n");
    
    for (String string : newArr) {
        String[] arrValue = string.split(":");
        System.out.println("key: "+ arrValue[0] +" value: "+ arrValue[1]);
    
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...