Как получить только имена полей из заданной строки в формате объекта (не используя POJO) из следующей строки с помощью регулярных выражений - PullRequest
1 голос
/ 04 мая 2020

Строка выглядит следующим образом:

"{
    account_number={
    type=long
    },
    firstname={
    type=text, fields={
    keyword={
    ignore_above=256, type=keyword
            }
        }
    },
    accountnumber={
    type=long
    },
    address={
    type=text, fields={
    keyword={
    ignore_above=256, type=keyword
            }
        }
    },
    gender={
    type=text, fields={
    keyword={
    ignore_above=256, type=keyword
            }
        }
    }
}"

Мне нужно получить только имена этих полей, т. Е. Account_number, имя, accountnumber, адрес, пол. Класс Pojo здесь не работает, поскольку содержимое внутри объектов не является фиксированным. Reg ex может работать. Есть предложения?

1 Ответ

1 голос
/ 04 мая 2020

Здесь я преобразовал вашу строку в JSON и затем извлек все ключи

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.json.JSONObject;


public class SOTest {

    public static void main(String args[]) {
        Set<String> keywords = new HashSet<String>();
        final String regex = "[a-z]\\w*";
        String string = "{\n"
             + "    account_number={\n"
             + "    type=long\n"
             + "    },\n"
             + "    firstname={\n"
             + "    type=text, fields={\n"
             + "    keyword={\n"
             + "    ignore_above=256, type=keyword\n"
             + "            }\n"
             + "        }\n"
             + "    },\n"
             + "    accountnumber={\n"
             + "    type=long\n"
             + "    },\n"
             + "    address={\n"
             + "    type=text, fields={\n"
             + "    keyword={\n"
             + "    ignore_above=256, type=keyword\n"
             + "            }\n"
             + "        }\n"
             + "    },\n"
             + "    gender={\n"
             + "    type=text, fields={\n"
             + "    keyword={\n"
             + "    ignore_above=256, type=keyword\n"
             + "            }\n"
             + "        }\n"
             + "    }\n"
             + "}";
        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);
         while(matcher.find()) {
             String gp = matcher.group();
             keywords.add(gp);
         }
         for (String keyword : keywords) {
            string = string.replace(keyword, "\""+keyword+"\"");
        }
         string = string.replace("=", ":");
         System.out.println(string);
        JSONObject jsonObject = new JSONObject(string);
        System.out.println(jsonObject.keySet());
    }
}

output

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