检查字符串是否可以解析为int的布尔方法

时间:2019-02-05 21:11:53

标签: java string parsing integer boolean

请注意,在将我的问题标记为重复之前,我引用的是这个问题:What's the best way to check if a String represents an integer in Java?

我正在尝试检查来自表示邻接矩阵的图类的图对象。

我正在使用增强的for循环在图形中的每个节点上进行迭代,然后使用嵌套的增强的for循环在从每个节点到每个其他节点的每个连接边上进行迭代。

问题是,我正在处理一些仅具有整数值边的图形,以及一些具有非整数值边的图形。

因此,我需要编写一个方法或一系列方法,以检查图形对象中的每个边是否包含可解析为整数的字符串。

我的代码非常简单和基本,但是当使用应返回false的图示例时,我只会得到一个真实的返回值。

我的代码如下:

//method to determine if a string can be parsed as an integer greater than zero

public boolean isInteger(String str)
{
    try
    {   //if the string can be parsed as an int that's greater than zero...
        Integer.parseInt(str);
            return true;
    }
    catch(Exception e)
    {
        return false;
    }
}

//method to traverse all edges in a graph object to identify whether or not all 
//edges can be parsed as positive integers representing distances 
public void checkParsability()
{
    //while positive int edges is true and therefore all edges can be parsed as positive integers
    if (positive_int_edges)

    {
        for (Node n : this.nodeList)
        {
            for (Edge a : n.getOutgoingEdges())
                this.setPositive_int_edges(isInteger(a.getLabel()));
                //positive_int_edges = isInteger(a.getLabel());

            for (Edge a : n.getIncomingEdges())
                this.setPositive_int_edges(isInteger(a.getLabel()));
                //positive_int_edges = isInteger(a.getLabel());
        }
    }
    //return positive_int_edges;
}


public boolean isPositive_int_edges() {
    return positive_int_edges;
}

public void setPositive_int_edges(boolean positive_int_edges) {
    this.positive_int_edges = positive_int_edges;
}

邻接矩阵图看起来像这样:

~          val  AAA   BB    C  DDD    E
Alfa         S    ~    >    ~   99  fig
Bravo       67  999  -42    3    x   ==
Charlie      ~    ~    4    ~   yz    9
Delta       4e    3   22    x    ~  !=2
Echo       yes    ~    ~    ~  d>e   33

这应该返回false,但是由于某种原因它总是返回true。 任何帮助将不胜感激。谢谢

编辑:positive_int_edges是图形对象的布尔属性,默认设置为true。我的希望是遍历一系列边,直到找到第一个实例,在该实例中无法将字符串解析为int,在找到第一个实例之后,我想停止搜索,因为我不再需要担心剩余的状态尚未遍历的边。

编辑#2这是我尝试在驱动程序类中调用方法的方式:

System.out.println("\nthe parsability of graph g after call to parsability method is: \n");



g.checkParsability();

System.out.println(g.isPositive_int_edges());

1 个答案:

答案 0 :(得分:1)

首先:如果您对实际的数值不感兴趣,则使用正则表达式可能会更容易:

final static Pattern IsIntegerPattern = Pattern.compile("^\\d+$");

public boolean isInteger(String str) {
    return IsIntegerPattern.matcher(str).matches();
}

这可以避免引发和捕获不必要的异常。

关于结果始终为true:事实并非如此。如果最后一个输入边不是数字,它将返回false,因为您要遍历所有边并检查它们是否为整数,但是如果到达具有非整数值的边,则不中断循环。具有有效整数值的后续边将“覆盖”该信息。

因此您的实现应如下所示:

public void checkParsability()
{
    //while positive int edges is true and therefore all edges can be parsed as positive integers
    if (positive_int_edges)

    {
        for (Node n : this.nodeList)
        {
            for (Edge a : n.getOutgoingEdges()) {
                this.setPositive_int_edges(isInteger(a.getLabel()));
                //positive_int_edges = isInteger(a.getLabel());
                break;
            ]

            for (Edge a : n.getIncomingEdges()) {
                this.setPositive_int_edges(isInteger(a.getLabel()));
                //positive_int_edges = isInteger(a.getLabel());
                break;
            }
        }
    }
    //return positive_int_edges;
}