如何在Java中解析非常特定的输入

如何在Java中解析非常特定的输入,java,parsing,Java,Parsing,我试图弄清楚如何解析特定的输入。输入如下:“[(x,y)(x,y)(x,y)…(x,y)]” “x”和“y”是整数值。每个变量分别进入称为“x”和“y”的变量。然后将这些值放入节点类中的变量中。然后我有一个这些节点的数组。然而,我正在努力找出如何有效地解析输入以获得x和y值。谢谢你的帮助 编辑: 我很抱歉没有提供任何以前的代码。我曾尝试使用StringBuffer,但它变得非常混乱,我不知道如何区分多位数整数和单位数整数。我并不是想暗示有人为我编写代码,我只是想问,是否有人可以推荐我可以查找的各

我试图弄清楚如何解析特定的输入。输入如下:“[(x,y)(x,y)(x,y)…(x,y)]”

“x”和“y”是整数值。每个变量分别进入称为“x”和“y”的变量。然后将这些值放入节点类中的变量中。然后我有一个这些节点的数组。然而,我正在努力找出如何有效地解析输入以获得x和y值。谢谢你的帮助

编辑:

我很抱歉没有提供任何以前的代码。我曾尝试使用StringBuffer,但它变得非常混乱,我不知道如何区分多位数整数和单位数整数。我并不是想暗示有人为我编写代码,我只是想问,是否有人可以推荐我可以查找的各种方法,因此我对此表示歉意。

最有效的方法可能是手工编写解析器代码,以逐步遍历字符串中的位置等等。这需要大量的编码

幸运的是,简单(但效率较低)的方法并不太低效

  • 使用正则表达式(
    模式
    /
    匹配器
    )匹配并提取
    [
    ]
    字符之间的子字符串
  • 使用
    String.split(…)
    在连续的
    字符之间进行拆分
  • 创建
    节点[]
    ,其条目数与上一次拆分时的条目数相同

  • 在循环中:

    • 使用正则表达式匹配并提取
      x
      y
      数字作为字符串
    • 将字符串转换为数字
    • 构建
      节点
      对象并将其添加到数组中
剩下的就是“编写代码”(和阅读javadocs),我不会因为为你这么做而侮辱你的智慧1


1-@伏都教的方法同样有效…除了暗示对你的智力的侮辱:-)

你可以使用正则表达式

public static void main(String [] args) {

    String input = "[(1,2) (3,4) (5,6)]";

    Pattern pattern = Pattern.compile("(\\d+),(\\d+)");
    Matcher matcher = pattern.matcher(input);

    List<Node> nodes = new ArrayList<Node>();
    Node node = null;
    while (matcher.find()) {
        node = new Node();
        node.setX(Integer.parseInt(matcher.group(1)));
        node.setY(Integer.parseInt(matcher.group(2)));
        nodes.add(node);
        System.out.printf("x=%d, y=%d\n", node.getX(), node.getY());
    }
}
查看更多信息:


Regex是你的朋友;)让我们看看你试过什么。。。要求我们做所有的工作有点不礼貌。你可以从两端删除两个字符并用
”(
)分割。然后解析
x,y
部分是很明显的。举个例子,有很多方法。如果你提供一些非常具体的代码来讨论,包括演示如何(不)进行讨论,对我们来说会更容易工作,以及您试图解决的问题。对于适当的正则表达式,不需要第1点和第2点;)
public class Node {

    private int x;
    private int y;

    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }

}