在我的应用程序中,我动态获取字符串值。我想将这些值分配给字符串数组然后打印这些值。但它显示一个错误(空指针异常) EX:
String[] content = null;
for (int s = 0; s < lst.getLength(); s++) {
String st1 = null;
org.w3c.dom.Node nd = lst.item(s);
if (nd.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
NamedNodeMap nnm = nd.getAttributes();
for (int i = 0; i < 1; i++) {
st1 = ((org.w3c.dom.Node) nnm.item(i)).getNodeValue().toString();
}
}
content[s] = st1;
//HERE it shows null pointer Exception.
}
由于
答案 0 :(得分:8)
这是因为你的字符串数组为null。 String[] content=null;
您将数组声明为null,然后尝试在其中指定值,这就是它显示NPE的原因。
您可以尝试为字符串数组提供初始大小,或者更好地使用ArrayList<String>
。
即:
String[] content = new String[10]; //--- You must know the size or array out of bound will be thrown.
如果使用像
这样的arrayList,那就更好了List<String> content = new ArrayList<String>(); //-- no need worry about size.
列表使用add(value)
方法在列表中添加新值,并使用foreach
循环打印列表内容。
答案 1 :(得分:0)
使用ArrayList
或Vector
以动态方式创建字符串的集合(或数组)。
List<String> contents = new ArrayList<String>();
Node node = (org.w3c.dom.Node) nnm.item(i)).getNodeValue();
if (null != node)
contents.add(node.toString());
在循环之外,您可以执行以下操作
for(String content : contents) {
System.out.println(content) // since you wanted to print them out
答案 2 :(得分:0)
有点难以理解你所追求的是因为你的例子被淹没了。但是,您的String数组为null。你需要初始化它,而不仅仅是声明它。您是否考虑过使用ArrayList? java中的数组是固定长度的(除非他们从我大学时代就改变了这一点)。
使用ArrayList要简单得多。
E.g:
List<String> content = new ArrayList<String>();
for (int i = 0; i < limit; i++){
String toAdd;
//do some stuff to get a value into toAdd
content.add(toAdd)
}
你的一个for循环也有些奇怪。
for(int i=0;i<1;i++)
以上只会迭代一次。澄清:
for(int i=0;i<1;i++){
System.out.println("hello");
}
在功能上与:
相同System.out.println("hello");
他们都打印出“你好”一次,并且就是这样。
答案 3 :(得分:0)
使用
content[s] = new String(st1);
现在它为该特定数组索引创建新实例。