2017-01-02 5 views
-2

Ich schrieb Code:.replace (Liste (x), "") funktioniert Java nicht

List<String> Names = new ArrayList<String>(); 
List<Double> Prices = new ArrayList<Double>(); 
List<String> Dates = new ArrayList<String>(); 
List<String> Hours = new ArrayList<String>(); 
List<String> iDs = new ArrayList<String>(); 
SimpleAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView resultsListView = (ListView) findViewById(R.id.listMyReceipts); 
    SearchView m = (SearchView) findViewById(R.id.action_search); 

    HashMap<String, String> NamePrice = new HashMap<>(); 

    TextView test = (TextView) findViewById(R.id.test); 

    Names.add("Starbucks"); Prices.add(11.99); Dates.add("01/01/2017"); Hours.add("9:33"); 
    Names.add("Apple Store"); Prices.add(500.00); Dates.add("01/01/2017"); Hours.add("9:30"); 
    Names.add("Esselunga"); Prices.add(135.67); Dates.add("01/01/2017"); Hours.add("11:51"); 
    Names.add("Mediaworld"); Prices.add(19.98); Dates.add("01/01/2017"); Hours.add("12:03"); 
    Names.add("Starbucks"); Prices.add(11.99); Dates.add("01/01/2017"); Hours.add("12:47"); 

    for (int i = 0; i < Names.size(); i++) { 
     iDs.add(";[email protected]:" + i + ":@+;"); 
     NamePrice.put(iDs.get(i) + Names.get(i), " " + Prices.get(i).toString() + "€" + " - " + Dates.get(i) + " " + Hours.get(i)); 
    } 



    List<HashMap<String, String>> listItems = new ArrayList<>(); 
    adapter = new SimpleAdapter(this, listItems, R.layout.list_item, 
      new String[] {"First", "Second"}, 
      new int[] {R.id.listitemTitle, R.id.listitemSubItem}); 

    //Integer x = 0; 
    //int x = -1; 
    Iterator it = NamePrice.entrySet().iterator(); 
    for (int i = 0; i < iDs.size(); i++) { 
     HashMap<String, String> resultMap = new HashMap<>(); 
     Map.Entry pair = (Map.Entry) it.next(); 
     resultMap.put("First", pair.getKey().toString().replace(iDs.get(i), "")); 
     resultMap.put("Second", pair.getValue().toString()); 
     listItems.add(resultMap); 
    } 
    //test.setText(IDs.get(x - 1)); 

    resultsListView.setAdapter(adapter); 

} 

Dies sollte alle IDs in ersetzen "". Es tut es nicht. So könnte der Ausgang sein:; + @: 0: @ +; NAME1 12.99; + @: 1: @ +; NAME2 0,99 Aber in der zweiten Schleife, wenn ich

sagen
resultMap.put("First", pair.getKey().toString().replace(IDs.get(0), "")); 

ersetzt es richtig das Element 0. Die Ausgabe wäre: NAME1 12,99; + @: 1: @ +; NAME2 0,99

+0

weil 'ersetzen' gibt Ihnen neues String-Objekt, alte ist nicht geändert –

+0

so, wie kann ich tun? @PavneetSingh – Johnson

+0

warte, du meinst, innere Schleife, mit index, dein ersetzen funktioniert nicht, scheint wie ich interpretiere deine Frage auf andere Weise –

Antwort

0

Sie erhalten die Einträge von nicht in der Reihenfolge, die Sie erwarten. Ich habe in ein System.out.println() in Ihrer zweiten for Schleife und bekam die Ausgabe in dieser Reihenfolge:

;[email protected]:3:@+;Mediaworld 
;[email protected]:0:@+;Starbucks 
;[email protected]:4:@+;Starbucks 
;[email protected]:1:@+;Apple Store 
;[email protected]:2:@+;Esselunga 

So versuchen Sie ;[email protected]:0:@+; in ;[email protected]:3:@+;Mediaworld usw. zu ersetzen. Das ersetzt nichts. Der Grund ist, dass ein HashMap ist. Ein HashMap Iterator gibt die Einträge nicht in einer bestimmten Reihenfolge zurück, insbesondere nicht in der Reihenfolge, in der sie eingefügt wurden.

LinkedHashMap<String, String> NamePrice = new LinkedHashMap<>(); 

Seine Iterator gibt die Einträge sie erstellt wurden, in der Reihenfolge:

können Sie ein LinkedHashMap stattdessen verwenden. So, jetzt funktionieren die Ersetzungen.

+0

Nur ein Wort: Super – Johnson

Verwandte Themen