android arraylist筛选,Filter arraylist in java/android

这篇博客探讨了在Android环境中,如何实现一个文本框监听器,以便在用户输入'hewo'时,从一个包含'Helloworld'和'Hellowoman'等元素的ArrayList中筛选并显示匹配项。代码示例展示了在文本变化时更新ListView的逻辑,但目前的实现还存在一些问题,当输入'hewo'时,返回的结果包含了不完全匹配的条目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hello I need filter an ArrayList

I have a ArrayList with following items:

"Hello world"

"Hello man"

"Hello woman"

"Goodbye world"

"Goodbye man"

"Goodbye woman"

then on TextBox I added a textchanged listener (Android).What i want is if I write "he wo" separated by space, it displays "Hello world" and "Hello woman".

I've been fighting with this about an hour and only I got is that if I write "he wo" I get the following items: "Hello world", "Hello man", "Hello woman", "Goodbye world".

Here is the code

et.addTextChangedListener(new TextWatcher()

{

public void afterTextChanged(Editable s)

{

// Abstract Method of TextWatcher Interface.

}

public void beforeTextChanged(CharSequence s,

int start, int count, int after)

{

// Abstract Method of TextWatcher Interface.

}

public void onTextChanged(CharSequence s, int start, int before, int count)

{

//listabusClientes = new ArrayList();

paraulesBuscar = s.toString().split(" "); //Array of string

sortarray = new ArrayList(); //ArrayList of class busCliente

sortarray.clear();

for(int x = 0; x < paraulesBuscar.length; x++){

sortarray.clear();

for (int i = 0; i < listabusClientes.size(); i++)

{

if ((listabusClientes.get(i).getNom().toUpperCase().indexOf(paraulesBuscar[x].toUpperCase()) != -1) || (listabusClientes.get(i).getCodiClient().toUpperCase().indexOf(paraulesBuscar[x].toUpperCase()) != -1))

{

sortarray.add(listabusClientes.get(i));

}

}

}

lv.setAdapter(new ListViewAdapter(buscar_client.this,

R.layout.simple_list_item_1, sortarray));

}

});

Edited algorithm

paraulesBuscar = s.toString().split(" ");

sortarray = new ArrayList();

sortarray.clear();

for(int x = 0; x < paraulesBuscar.length; x++){

sortarray.clear();

for (int i = 0; i < listabusClientes.size(); i++)

{

String[] clientSplit = listabusClientes.get(i).getNom().split(" ");

for(int cs = 0; cs < clientSplit.length; cs++){

System.out.println(clientSplit[cs]);

if (clientSplit[cs].toUpperCase().contains(paraulesBuscar[x].toUpperCase()))

{

sortarray.add(listabusClientes.get(i));

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值