繁体   English   中英

为什么我的array.size()给出错误的值?

[英]Why do my array.size() give wrong value?

我有一个名为arrayArrayList实例。 当我解析一些JSON数据时,它将全部存储在array 当我做一个System.out.println(array); 它将列出一长串项目,大约30个,但是当我写System.out.println(array.size); 它会给出一个值。

当列表包含至少30个值时,为什么只给我值1?

我的代码:

public void setLocationName (String name) {
    array = new ArrayList<String>();
    array.add(name);
    System.out.println(array); //This return a long list
    System.out.println(array.size()); //But this only return the value 1
}

public String[] getLocationName() {
    String tArray[] = null;
    for (int i = 0; i < array.size(); i++){
      System.out.println(i);
      tArray = array.toArray(new String[i]);    
    }       
    return tArray;
}

}

长长的清单:

[Brunnsparken, Göteborg]
[Brunnsgatan, Göteborg]
[Brunnslyckan, Lerum]
[Brunnsbotorget, Göteborg]
[Brunnsnäs, Ulricehamn]
[Brunnshult, Mellerud]
[Brunnsdal, Skövde]
[Brunns skola, Ulricehamn]
[Brunnsgården, Kungälv]
[Brunns kyrka, Ulricehamn]
[Boråsparken, Borås]
[Stadsparken, Ulricehamn]
[Lysekilsparken, Lysekil]
[Mössebergsparken, Falköping]
[Dalaborgsparken, Vänersborg]
[Rösparken, Åmål]
[Lillhagsparken Norra, Göteborg]
[Lillhagsparken Södra, Göteborg]
[Sylte Ryrbäcksparken, Trollhättan]
[Skogstomtsparken, Borås]
[Svinesundsparken, Norge]
[Håjumsparken, Trollhättan]
[Eriksdalsparken, Bollebygd]
[Fridhemsparken, Lidköping]

我的结果是, tArray仅返回列表中的tArray但我想返回整个列表。

如何解决呢?

Java不了解Json ,基本上您在做什么就是在数组中添加字符串

this.array.add(name); --->向数组添加一个值,因此大小仅为一个

您可能需要使用特定的Json库将数据解析为java arraylist。

问候

public void setLocationName (String name) {
    array = new ArrayList<String>();
    array.add(name);
    System.out.println(array); //This return a long list
    System.out.println(array.size()); //But this only return the value 1
}

每次调用此方法时,您都在创建一个新的ArrayList

array = new ArrayList<String>();

您可以删除上面的行,但是我建议您重命名该方法,因为它不再是setter,实际上您现在每次调用此方法时都将其添加到现有列表中。

我建议您要做的是在解析给setter之前构建List,也许使用一个foreach循环 (我不确定您正在使用哪种对象)并简化setter( setLocationName )以使其适应。

因此它将变为:

public void setLocationName(ArrayList<String> names)
    {
        this.array = names;
        System.out.println(array); //This return a long list
        System.out.println(array.size()); //But this only return the value 1
    }

看起来您需要将String解析成对。

在我看来, Map可能是最适合存储数据的结构-我认为值的第一部分是唯一的。

正则表达式可能是解析数据的最佳方法:

public static void main(String[] args) {

    final String data = "[Brunnsparken, Göteborg]\n"
            + "[Brunnsgatan, Göteborg]\n"
            + "[Brunnslyckan, Lerum]\n"
            + "[Brunnsbotorget, Göteborg]\n"
            + "[Brunnsnäs, Ulricehamn]\n"
            + "[Brunnshult, Mellerud]\n"
            + "[Brunnsdal, Skövde]\n"
            + "[Brunns skola, Ulricehamn]\n"
            + "[Brunnsgården, Kungälv]\n"
            + "[Brunns kyrka, Ulricehamn]\n"
            + "[Boråsparken, Borås]\n"
            + "[Stadsparken, Ulricehamn]\n"
            + "[Lysekilsparken, Lysekil]\n"
            + "[Mössebergsparken, Falköping]\n"
            + "[Dalaborgsparken, Vänersborg]\n"
            + "[Rösparken, Åmål]\n"
            + "[Lillhagsparken Norra, Göteborg]\n"
            + "[Lillhagsparken Södra, Göteborg]\n"
            + "[Sylte Ryrbäcksparken, Trollhättan]\n"
            + "[Skogstomtsparken, Borås]\n"
            + "[Svinesundsparken, Norge]\n"
            + "[Håjumsparken, Trollhättan]\n"
            + "[Eriksdalsparken, Bollebygd]\n"
            + "[Fridhemsparken, Lidköping]";
    final Pattern pattern = Pattern.compile("\\[([^,]++),\\s++([^\\]]++)\\]");
    final Matcher matcher = pattern.matcher(data);
    final Map<String, String> items = new TreeMap<>();
    while (matcher.find()) {
        items.put(matcher.group(1), matcher.group(2));
    }
    for (final Entry<String, String> entry : items.entrySet()) {
        System.out.println(entry);
    }
}

输出结果:

Boråsparken=Borås
Brunns kyrka=Ulricehamn
Brunns skola=Ulricehamn
Brunnsbotorget=Göteborg
Brunnsdal=Skövde
Brunnsgatan=Göteborg
Brunnsgården=Kungälv
Brunnshult=Mellerud
Brunnslyckan=Lerum
Brunnsnäs=Ulricehamn
Brunnsparken=Göteborg
Dalaborgsparken=Vänersborg
Eriksdalsparken=Bollebygd
Fridhemsparken=Lidköping
Håjumsparken=Trollhättan
Lillhagsparken Norra=Göteborg
Lillhagsparken Södra=Göteborg
Lysekilsparken=Lysekil
Mössebergsparken=Falköping
Rösparken=Åmål
Skogstomtsparken=Borås
Stadsparken=Ulricehamn
Svinesundsparken=Norge
Sylte Ryrbäcksparken=Trollhättan

您可以通过循环(如上)或通过按键从Map获取值来访问项目。 我使用的TreeMap将按键对数据进行排序,您还可以使用LinkedHashMap按插入顺序存储数据。

您也可以将项目存储在类似结构的元组List中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM