我使用Interpreted Java进行网页抓取,并且不确定我最近在PC上升级到Java(版本8.x而不是版本7.x)与我的问题有什么关系但是我不能再在里面声明一个字符串if语句然后在外面调用它。这曾经工作但现在没有。有问题的代码是这样的:
if (tmp.indexOf("<b>") >= 0) {
String[] stockSPLIT = tmp.split("<b>");
}
然后再使用我使用的代码:
if (stockSPLIT.length > 2)
我已经想通过使用页面顶部的以下代码来修复它,但是想知道是否有人可以指出我为什么这样做的正确方向?
String[] stockSPLIT = {"",""};
答案 0 :(得分:1)
你并没有真正修复它,变量是known only in the scope it was defined in - 两个stockSPLIT
根本不相关,每个都引用一个不同的变量。
if(something) {
String tmp = "Hi";
}
//tmp is not accessible here
if(somethingElse) {
String tmp = "Bye";
//tmp is a different variable, not related to the previous one
}
当你有
时String[] stockSPLIT = {"",""};
在页面顶部&#34;&#34;正如您所提到的,您正在创建一个可通过类访问的成员变量。请注意&#34;页面顶部&#34;不是它工作的原因,你可以在任何方法之外的页面底部替换它。
答案 1 :(得分:1)
如果有效则旧功能实际上是不正确的。可变可达性受其范围的限制:
if (...)
{ // new scope
String[] stockSPLIT = ...;
} // scope ends, all variables declared inside it are now unreachable
你的修补程序也无法正常工作,因为它不是使用旧的变量,而是创建一个新的,完全不同的版本,它恰好具有相同的名称。正确的解决方案是:
String[] stockSPLIT = {};
if (...) {
stockSPLIT = ...; // no String[] here
}
if (stockSPLIT.length > 2)