Java 用于检查字符串是否可以解析为int的布尔方法
请注意,在您将我的问题标记为重复之前,我将引用此问题: 我试图检查来自表示邻接矩阵的graph类的graph对象 我使用一个增强的for循环来迭代图中的每个节点,然后使用一个嵌套的增强的for循环来迭代从每个节点到另一个节点的每个连接边 问题是,我正在处理一些只有整数值边的图,以及一些有非整数值边的图 因此,我需要编写一个方法或一系列方法来检查图形对象中的每条边是否包含可作为整数进行分析的字符串 我的代码非常简单和基本,但是当使用应该返回false的图形示例时,我只得到一个true返回值 我的代码如下:Java 用于检查字符串是否可以解析为int的布尔方法,java,string,parsing,integer,boolean,Java,String,Parsing,Integer,Boolean,请注意,在您将我的问题标记为重复之前,我将引用此问题: 我试图检查来自表示邻接矩阵的graph类的graph对象 我使用一个增强的for循环来迭代图中的每个节点,然后使用一个嵌套的增强的for循环来迭代从每个节点到另一个节点的每个连接边 问题是,我正在处理一些只有整数值边的图,以及一些有非整数值边的图 因此,我需要编写一个方法或一系列方法来检查图形对象中的每条边是否包含可作为整数进行分析的字符串 我的代码非常简单和基本,但是当使用应该返回false的图形示例时,我只得到一个true返回值 我的代
//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
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;
}
这应该返回false,但由于某些原因,它总是返回true。
任何帮助都将不胜感激。谢谢
Edit: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());
首先:如果您对实际的数值不感兴趣,那么使用正则表达式可能更容易:
final static Pattern IsIntegerPattern = Pattern.compile("^\\d+$");
public boolean isInteger(String str) {
return IsIntegerPattern.matcher(str).matches();
}
这样可以避免引发和捕获不必要的异常
关于结果一直是true
:事实并非如此。如果最后传入的边不是一个数字,它将返回false
,因为您迭代所有边并检查它们是否为整数,但如果到达具有非整数值的边,则不会中断循环。具有有效整数值的后续边将“覆盖”该信息
因此,您的实现应该如下所示:
~ 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
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;
}
你是说
Integer.parseInt(“~”)
不会引发异常?@csmckelvey不,我没有得到任何异常被引发的迹象,可能是因为catch块?它必须引发异常。编辑:请在中添加System.out.println(str)
try
并确保所有内容都已打印出来,好吗?如果抛出异常,则catch块将返回false,而您所说的没有发生。这意味着类似于Integer.parseInt(“~”)
的东西不会抛出一个错误的异常-它确实会抛出一个异常。基本上,我无法重新创建您所描述的内容。很可能没有为所有输入调用您的代码。