2013-03-27 4 views
0

У меня есть экземпляр ArrayList по имени array. Когда я разбираю некоторые данные JSON, он сохранит все это в array. Когда я сделаю System.out.println(array);, он перечислит длинный список предметов, около 30, но когда я напишу System.out.println(array.size);, он даст значение один.Почему массив array.size() дает неправильное значение?

Почему это дает мне значение 1, когда список содержит не менее 30 значений?

Мой код для этого:

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 но Я хочу вернуть весь список.

Как это решить?

+8

Вы создаете новый массив и добавляете к нему 1 элемент - поэтому он всегда находится в том месте, где вы печатаете размер, и должен иметь только один элемент. – berry120

+0

Что вы подразумеваете под _This return long list_? Вы создаете «новый ArrayList», а затем «добавляете» один элемент. Он не может содержать длинный список. Пожалуйста, напишите пример 'name'. –

+0

Когда я печатаю System.out.println (массив); он дал длинный список, я разместил его выше – Josef

ответ

4

Java не понимает Json и в основном то, что вы делаете, это добавить строку в массив

this.array.add(name); ---> добавить одно значение в массив, поэтому размер только один

вам может потребоваться использовать определенную библиотеку Json для анализа данных в Java-менеджере.

рассматривает

+0

Я разобрал его уже с JSON simple – Josef

+0

О да, это правда .. Его одна единственная строка ... – Josef

+0

Так что мне нужно разделить String – Josef

0
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>();

Вы можете просто удалить эту строку, однако я предлагаю переименовать метод как это уже не сеттер, и вы фактически добавляете в существующий список каждый раз, когда вы вызываете этот метод.

Я предлагаю то, что вы хотите сделать, это создать свой список перед разбором в инкубаторе, возможно, с помощью foreach loop (я не уверен, какой тип объекта вы работаете с) и упростить сеттер (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 
    } 
+0

На самом деле просто перемещение массиваList решило всю проблему :-) Теперь мой combobox отображает все элементы из моего JSON. Вы решили это. – Josef

+0

Проблема заключается в том, что у вас больше нет традиционного 'setter', поскольку вы фактически вносите свой вклад в существующий список каждый раз, когда вы вызываете этот метод. Поэтому, возможно, вам следует переименовать метод как-то еще по крайней мере. – buymypies

+0

Возможно, вам стоит дать этому человеку кредит на решение вашей проблемы. – M7Jacks

0

Посмотрите, как вам нужно разобрать String в пар.

Мне кажется, что Map может быть наиболее подходящей структурой для хранения данных - я предполагаю, что первая часть от значения уникальна.

Regex, вероятно, лучший подход к синтаксическому анализу данных:

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.

Смежные вопросы