【问题标题】:How to remove an element from a String array?如何从字符串数组中删除元素?
【发布时间】:2014-10-05 19:42:57
【问题描述】:

我有一个包含三个项目的数组,例如:

title_list = new String[] { title1, title2, title3 };

这些值来自SharedPreferences。我想检查一下,如果这些值中的任何一个为空,则应将它们从数组中删除。

例如,如果title1 的值来自另一个活动并且是null,则应删除title1,数组将为String[] { title2, title3 }

这是我的代码:

package com.example.e_services;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class FavList extends Activity {
    // Declare Variables
    ListView list;
    FavListViewAdapter adapter;
    String[] rank;
    String[] link;
    String[] population;
    String title1, title2;
    String link1, link2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from listview_main.xml
        setContentView(R.layout.listview_main2);

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        title1 = prefs.getString("title1", ""); //no id: default value
        title2 = prefs.getString("title2", ""); //no id: default value

        link1 = prefs.getString("link1", ""); //no id: default value
        link2 = prefs.getString("link2", ""); //no id: default value

        if (title1.length() == 0){
            rank[0] = null;             
        }

        // Generate sample data into string arrays
        rank = new String[] { title1, title2, "title3" };
        link = new String[] { link1, link2 };

        // Locate the ListView in listview_main.xml
        list = (ListView) findViewById(R.id.listview);

        // Pass results to ListViewAdapter Class
        adapter = new FavListViewAdapter(this, rank);
        // Binds the Adapter to the ListView
        list.setAdapter(adapter);
        // Capture ListView item click
        list.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent i = new Intent(FavList.this, WebsiteView.class);
                // Pass all data rank
                i.putExtra("Link", link);
                i.putExtra("position", position);
                //Toast.makeText(getBaseContext(), "link  "+link1,Toast.LENGTH_SHORT).show();
                startActivity(i);
            }
        });
    }
}

我尝试使用

if (title1.length() == 0 ){
    title_list[0] = null;               
}

但它不起作用。

【问题讨论】:

  • 你不能从数组中删除一个元素,它有一个固定的大小。你必须创建一个新的、更小的数组,然后复制你想要的元素。
  • @Keppil 为什么操作不能从数组中删除任何元素。 op 唯一需要做的就是根据已删除数组的索引向前或向后移动其他现有元素
  • 说“它不起作用”并不能告诉我们您预期会发生什么或实际发生了什么。

标签: java android arrays arraylist


【解决方案1】:

您无法从现有数组中删除元素 - 一旦您创建了一个数组,它的长度就是固定的。您可以替换元素,但不能添加或删除它们。

选项:

  • 更改变量的值以引用新列表,例如

    title_list = new String[] { title_list[1], title_list[2] };
    
  • 改用List&lt;String&gt;,使用ArrayList&lt;String&gt;之类的东西作为实现

【讨论】:

  • 为什么操作不能从数组中删除任何元素。 op 唯一需要做的就是根据已删除数组的索引向前或向后移动其他现有元素
  • @KickButtowski:“删除”表示数组的长度会改变。向后或向前移动元素不会这样做。您不能删除数组中的元素,因为它的大小是固定的。如果 OP 可以很好地保留一个 3 元素数组,其中只有两个元素是“有用的”,那很好......但它不会删除元素。
  • @KickButtowski:特别是,OP 在问题中说:“数组将是 String[] {title2, title3}” - 如果元素只是在其中替换,则情况并非如此一个 3 元素数组。
猜你喜欢
  • 2017-12-24
  • 2015-06-23
  • 2022-11-16
  • 2020-08-29
  • 2020-05-29
  • 2012-03-27
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多