Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建字符串解析器以分析嵌套结构_Java_Algorithm - Fatal编程技术网

Java 创建字符串解析器以分析嵌套结构

Java 创建字符串解析器以分析嵌套结构,java,algorithm,Java,Algorithm,我想了解如何创建解析器来解析如下字符串: [1,2,“abc”,[2.2345,76,“n”],[“abc”,1,“c”],23,44] 方括号中的每个值(数字、十进制、字符串、null)都可以用逗号分隔,方括号中的值可以嵌套在另一个方括号中,并且可以包含任意数量的值 我需要用Java创建它 Q:是否有一些库、算法/设计策略/设计模式,如何创建这样的解析器 编辑: final String value = "[1,2,\"abc\",[2.2345,76,\"n\"],[\"abc\",1,\

我想了解如何创建解析器来解析如下字符串:

[1,2,“abc”,[2.2345,76,“n”],[“abc”,1,“c”],23,44]

方括号中的每个值(数字、十进制、字符串、null)都可以用逗号分隔,方括号中的值可以嵌套在另一个方括号中,并且可以包含任意数量的值

我需要用Java创建它

Q:是否有一些库、算法/设计策略/设计模式,如何创建这样的解析器


编辑:

final String value = "[1,2,\"abc\",[2.2345,76,\"n\"],[\"abc\",1,\"c\"],23,44]";

ObjectMapper objectMapper = new ObjectMapper();
Object[] foo = objectMapper.readValue(value, Object[].class);

List<Object> tokens = Arrays.asList(foo);
final String value=“[1,2,\'abc\”,[2.2345,76,\'n\”,[\'abc\”,1,\'c\”],23,44];
ObjectMapper ObjectMapper=新的ObjectMapper();
Object[]foo=objectMapper.readValue(值,Object[].class);
List tokens=Arrays.asList(foo);

它适用于单值(不是嵌套数组),有没有办法在第一次调用中直接解析这些嵌套数组,或者我必须在
标记
列表中找到这些数组并单独解析?

我建议您检查以下内容,因为您提供的字符串看起来像JSON数组。事实上,您可以查看JSON parsers基准项目——通过这个项目,您可以自己选择合适的JSON解析器。

嵌套的JSON数组被解析为
列表
对象。因为您似乎也希望外部JSON数组作为
列表
,所以将其解析为
列表,而不是
对象[]

您可以看到使用此代码实际得到的结果:

public static void main(String[] args) throws Exception {
    final String value = "[1,2,\"abc\",[2.2345,76,\"n\"],[\"abc\",1,\"c\"],23,44]";

    ObjectMapper objectMapper = new ObjectMapper();
    List<?> tokens = objectMapper.readValue(value, List.class);

    printTypes("", tokens);
}
static void printTypes(String indent, List<?> tokens) {
    for (Object token : tokens) {
        System.out.println(indent + token.getClass().getName() + " - " + token);
        if (token instanceof List)
            printTypes(indent + "  ", (List<?>) token);
    }
}

这个字符串可以用JSON解析器解析,那么为什么要创建自己的呢?这不是JSON格式,是吗?我可以使用什么库?您想象的解析器的输出是什么样子的?你的问题中的字符串将如何解析?谢谢,但我不确定我的字符串是否为JSON格式。我确定你在问题中提供的字符串是JSON格式的。那么,我正在使用
com.fasterxml.jackson
库,我会试试,谢谢:-)在我的原始问题中添加了一条注释,谢谢。
java.lang.Integer - 1
java.lang.Integer - 2
java.lang.String - abc
java.util.ArrayList - [2.2345, 76, n]
  java.lang.Double - 2.2345
  java.lang.Integer - 76
  java.lang.String - n
java.util.ArrayList - [abc, 1, c]
  java.lang.String - abc
  java.lang.Integer - 1
  java.lang.String - c
java.lang.Integer - 23
java.lang.Integer - 44