具有可变字段数的java解析字符串

具有可变字段数的java解析字符串,java,parsing,Java,Parsing,我知道在Java中解析有很多问题。 但是,我无法确定如何准确解析以下字符串- 输入字符串如下所示- [[0,0]->0[0,1]->1[0,2]->2[1,0]->3[0,4]->1[0,1]->2[0,6]->3,否则->2 我希望将输出解析为- Entry 1 : number1, number2, number3 Entry 2 : number4, number5, number6 ... 因此,对于本例,输出为- Entry 1 : 0, 0, 0 Entry 2 : 0, 1, 1

我知道在Java中解析有很多问题。 但是,我无法确定如何准确解析以下字符串-

输入字符串如下所示-

[[0,0]->0[0,1]->1[0,2]->2[1,0]->3[0,4]->1[0,1]->2[0,6]->3,否则->2

我希望将输出解析为-

Entry 1 : number1, number2, number3
Entry 2 : number4, number5, number6
...
因此,对于本例,输出为-

Entry 1 : 0, 0, 0
Entry 2 : 0, 1, 1
....
准确地说,应该忽略
else->2
部分

现在我的问题是——

  • 一个条目包含模式以外的内容
  • 方括号之间的数字数量可能会有所不同。 例如,输入字符串可以是-
    [[0]->0、[1]->1、[2]->2,else->2
我试着在第二个例子中使用split,我展示了-

String value = "[[0] -> 0, [1] -> 1, [2] -> 2, else -> 2";
value = value.replaceAll("\\[", "");
value = value.replaceAll("\\]", "");
String split[] = value.split(",");

for(int j=0;j<split.length;j++)
{
    String split2[] = split[j].split("->");
    split2[0] = split2[0].replaceAll("\\s","");
    if(split2[0].contains("else"))
        continue;    
    System.out.println(split2[0],+ " " + split split2[1].replaceAll("\\s",""));                     
}
String value=“[[0]->0[1]->1[2]->2,否则->2”;
value=value.replaceAll(“\\[”,“”);
value=value.replaceAll(“\\]”和“”);
字符串拆分[]=值。拆分(“,”;

对于(int j=0;j您可以搜索下一个
->
,然后在下一个
处拆分以获得一个“段”。现在,在
->
处拆分该段以获得“键”和“值”部分。最后,在剩余的
处拆分键以分离键(如果它不是最终的“else”-段)


matcher.group()
的输出将是类似于
“[0,0]->0”
的字符串,按照输入的格式进行尝试;查找模式。括号内数字范围的开始以“[”开头。括号内数字范围的结束以“]”结尾,在该范围是箭头“->”之后,一个数字和一个逗号。请查看下面代码的输出,您的解决方案应该很容易找到:

 public static void main(String[] args)
    {
        final String input = "[[3] -> 7, [0, 0] -> 0, [0, 1] -> 1, [0, 2] -> 2, [1, 0] -> 3, [0, 4] -> 1, [0, 1] -> 2, [0, 6] -> 3, else -> 2";
        String[] split;

        split = StringUtils.split(input, "->, ");

        for (String item : split)
        {
            System.out.println("Item: " + item);
        }
    }

注意:StringUtils是

的一部分,我不明白您的问题。您希望从字符串中解析什么?什么是[0,6]->3,else->2是什么意思?输出是什么样子的?我只是忽略了else部分。它是由第三方工具生成的输出。这个字符串到底代表什么?如果它是某种类型的数据,那么使用JSON或XML对其进行序列化。它只是一个以字符串格式输出的模型。给定您的输入,拆分不会返回任何内容。我理解错误方法是StringUtils.split
我以为它会在字符串“->”上拆分,而不是在字符上拆分:
“-”
”,“
谢谢,这正是我想知道的。但是我无法提供完美的逻辑。我在想,也许我需要
regex
,我对它没有任何经验。谢谢!
String regex = "(\\[\\d+(, \\d+)*\\] -> \\d+)";
Matcher matcher = Pattern.compile(regex).matcher(value);
while (matcher.find()) {
    System.out.println(matcher.group());
}
 public static void main(String[] args)
    {
        final String input = "[[3] -> 7, [0, 0] -> 0, [0, 1] -> 1, [0, 2] -> 2, [1, 0] -> 3, [0, 4] -> 1, [0, 1] -> 2, [0, 6] -> 3, else -> 2";
        String[] split;

        split = StringUtils.split(input, "->, ");

        for (String item : split)
        {
            System.out.println("Item: " + item);
        }
    }