java - 从 Java 字符串中提取值

标签 java string

我有以下格式的 Java 字符串:

String s = "[
    "samsung",

    ["samsung galaxy s9 case","samsung galaxy s8 case","samsung galaxy s9 plus case","samsung galaxy s8 charger"],

    [{"nodes":[{"name":"Cell Phones & Accessories","alias":"mobile"}]},{},{},{},{},{},{},{},{},{}],

    [],

    "1XQ3CN8WM8VSE"
]"

处理字符串的最佳方法是什么,以便我可以获得这些值(用 [] 括起来的第二项)

"samsung galaxy s9 case","samsung galaxy s8 case","samsung galaxy s9 plus case","samsung galaxy s8 charger"

List<String> 内?

更新

字符串是有效的 JSON 并使用代码进行了测试

public static boolean isJSONValid(String test) {
        try {
            new JSONObject(test);
        } catch (JSONException ex) {
            // edited, to include @Arthur's comment
            // e.g. in case JSONArray is valid as well...
            try {
                new JSONArray(test);
            } catch (JSONException ex1) {
                return false;
            }
        }
        return true;
    }

我还尝试将其解析为 JSON(按照建议),但我得到了异常。

JSONObject obj = 新的 JSONObject(s);

线程“main”org.json.JSONException 中出现异常:JSONObject 文本必须以 '{' at 1 [character 2 line 1] 开头。

我的字符串总是以 [..] 开头

最佳答案

该格式不是有效的 json,这就是您收到该错误的原因,获取所需字符串的一种简单方法是使用 split 方法,然后将其存储在您喜欢的集合中。

public static void main(String args[]){
    String s = "[samsung,[\"samsung galaxy s9 case\",\"samsung galaxy s8 case\",\"samsung galaxy s9 plus case\",\"samsung galaxy s8 charger\"],[{\"nodes\":[{\"name\":\"Cell Phones & Accessories\",\"alias\":\"mobile\"}]},{},{},{},{},{},{},{},{},{}],[],\"1XQ3CN8WM8VSE\"]";

    String[] splitedFullString = s.split(",\\[");
    String sequence = splitedFullString[1];
    sequence = sequence.replaceAll("]", "");
    sequence = sequence.replaceAll("\"", "");
    String[] splitSequence = sequence.split(",");

    List<String> list = new ArrayList<>(); 
    for(String item : splitSequence){
        list.add(item);
    }
    for(String item : list){
        System.out.println(item);
    }
}

关于java - 从 Java 字符串中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54911408/

相关文章:

mysql - SQL BIT 列必须为空,输出时为 TRUE,输入时为 NULL 或 1

c - 如何在不同的行中输入字符串?

c# - 用另一个替换字符串的一部分

c++ - 采访 : Adding two binary numbers given as strings

java - 最小化涉及读/写操作的代码

java - 如何从 HashMap 中仅打印前 10 个单词及其出现频率?

java - 使用Java Reflection初始化成员变量

java - 清除 editText 随机数

java - 从 WSDL 链接 java 访问 Web 服务

python - 除非字符串在python中用引号引起来,否则如何将字符串拆分为字符串?