如何从给定的字符串中以对象格式(不使用POJO)使用regex从下面的字符串中只获取字段名?

问题描述 投票:1回答:1

字符串如下。

"{
    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,firstname,accountnumber,地址,性别。Pojo类在这里是行不通的,因为对象里面的内容不固定。reg ex可能会有用。有什么建议吗?

java regex string regex-group
1个回答
1
投票

在这里,我已经将ur字符串转换为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());
    }
}

产出

[account_number, firstname, accountnumber, address, gender]
© www.soinside.com 2019 - 2024. All rights reserved.