字符串连接和追加在 foreach 中不起作用

Ala*_*ifa 0 java string android

我有一系列对象,比如说汽车。对象中有一个名为“selected”的属性,带有 setter 和 getter。

用户可以从回收视图中选择/取消选择汽车,并且我使用适配器正确更新数据。现在,当用户单击按钮时,我想提取所有选定汽车的 ID 字符串。

所以我就这么做了。

 String cars_ids = "";
 StringBuilder car_builder = new StringBuilder();
        for (Car car: carList) {
             // I added this log to make sure that there are in fact selected cars. and there are!
            Log.e("==>> cicarty ",  car.isSelected() +"");
            if (car.isSelected()) {
                car_builder.append(car.getID()).append(",");
            }
        }

        if (!cars_ids.isEmpty()){
            cars_ids = car_builder.toString().substring(0, car_builder.toString().length() - 1).trim();
        }
        // cars_ids is always empty...!! 
        Log.e("=>> ", " cars_ids : " + cars_ids );
Run Code Online (Sandbox Code Playgroud)

我也尝试过串联,但也不起作用

 String cars_ids = "";
        for (Car car: carList) {
            Log.e("==>> cicarty ",  car.isSelected() +"");
            if (car.isSelected()) {
                cars_ids.concat(car.getID() + ",");
            }
        }

        if (!cars_ids.isEmpty()){
            cars_ids = cars_ids.substring(0, cars_ids.length() - 1).trim();
        }
        // cars_ids is always empty again...!! 
        Log.e("=>> ", " cars_ids : " + cars_ids );
Run Code Online (Sandbox Code Playgroud)

And*_*ner 5

if (!cars_ids.isEmpty()){
Run Code Online (Sandbox Code Playgroud)

始终为 false,StringBuilder因为它始终为空:您要附加到StringBuilder,然后检查String

使用:

if (car_builder.length() > 0){
Run Code Online (Sandbox Code Playgroud)

反而。进而

// cars_ids is always empty...!! 
Log.e("=>> ", " cars_ids : " + cars_ids );
Run Code Online (Sandbox Code Playgroud)

是的,总是空的,因为你没有改变它。先分配car_ids = car_builder.toString()


cars_ids.concat(car.getID() + ",");
Run Code Online (Sandbox Code Playgroud)

不会做任何有用的事情,因为您忽略了返回值。反而:

car_ids = cars_ids.concat(car.getID() + ",");
Run Code Online (Sandbox Code Playgroud)

或者,更惯用的说法是:

car_ids += car.getID() + ",";
Run Code Online (Sandbox Code Playgroud)

值得一提的是,在 Java 8+ 中,您可以更轻松地使用 aStringJoiner来实现相同的目的。