如何在Java中解析非常具体的输入

时间:2015-04-27 21:30:24

标签: java parsing

我试图找出如何解析特定输入。输入如下所示:" [(x,y)(x,y)(x,y).......(x,y)]"

" x"和" y"是整数值。每个变量都被称为" x"和" y"分别。然后将这些值放入Node类中的变量中。然后我有一个这些节点的数组。但是,我正在努力弄清楚如何有效地解析输入以获取x和y值。谢谢你的帮助。

编辑:

我为没有提供任何先前的代码而道歉。我曾尝试使用StringBuffer,但它变得非常混乱,我不知道如何区分单位整数的多位数整数。我并不意味着暗示有人为我编写代码,我只是在询问是否有一些我可以查找的方法,任何人都可以推荐,所以我为此道歉。

2 个答案:

答案 0 :(得分:1)

"效率最高"方法可能是手动编码解析器以逐步执行字符串中的位置等。这是很多编码。

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

  • 使用正则表达式(Pattern / Matcher)匹配并提取[]字符之间的子字符串。
  • 使用String.split(...)分隔后续)(个字符。
  • 使用与前一个分组相同的条目数创建Node[]

  • 循环:

    • 使用正则表达式匹配并提取xy数字作为字符串。
    • 将字符串转换为数字
    • 构建Node对象并将其添加到数组中。

其余的是"只是编码" (并阅读javadocs),我不会因为你 1 而侮辱你的智慧。

1 - @VoodooCoder的方法同样有效......除了对你的智力的暗示侮辱: - )

答案 1 :(得分:1)

您可以使用Regex

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());
    }
}

Node是这样的:

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;
    }

}

查看更多内容: