有没有办法知道一个数组列表是否包含一段文本? [英] Is there any way to know if an arraylist contains a piece of text?
问题描述
我有一个包含多个项目的数组列表.假设它们是:深棕色"、蓝色"、绿色"……
I have an arraylist with several items. Let's say they are: "DARK BROWN", "BLUE", "GREEN",....
有什么方法可以查找我的某些物品中是否存在字符串DARK"?我知道 contains 会这样做,但只有在字符串完全正确时才会这样做.我的想法是查找作为我的项目之一开头但没有所有最后一个字符的文本.
Is there any way to look for if there's the string "DARK" in some of my items? I know that contains does this but it only does if the string is exactly. My idea is to look for a text that starts as one of my items but it hasn't all the last characters.
我在做一个循环,如:
for(int i=0;i<arraylist.size;i++){
String s = arraylist.get(i);
if (s.startsWith(mytext)){
do something
}
}
但它似乎是一种非常慢的方法,因为arraylist 可以包含很多元素.有什么更好的想法吗?
but it seems to be a very slow method because the arraylist can contain a lot of elements. Any better ideas?
编辑
只是为了确保您理解我的观点.我想知道我的 arraylist 的一个项目是否包含一个以一些文本开头的元素并获取该元素的完整文本.ArrayList.contains 是一个布尔值.如果我需要检索信息,我将不得不使用 IndexOf 左右,但如果我输入棕色",这个函数会给我空
Just to be sure you understand my point. I want to know if an item of my arraylist contains an element that starts with some text and to get the complete text of that element. ArrayList.contains is a boolean. If I need to retrieve information I will have to use IndexOf or so but this function gives me null if I put "brown"
编辑 2
这是给你的 auselen:
This is for you auselen:
Arraylist(大约 5000 个元素):
Arraylist (5000 elements or so):
- 大卫的猫在他的卧室里"
- 我喜欢月亮"
- 我想去火星"
- 我的球是红色的"
- 他们总是忘记南极"
- ...
我想知道是否有一个元素以I want to"开头,然后检索元素的其余部分.
I want to know if there's an element that starts with "I want to" and then retrieve the rest of the element.
推荐答案
这似乎是一个很慢的方法,因为arraylist可以包含很多元素.
it seems to be a very slow method because the arraylist can contain a lot of elements.
比如,一百万?
Nov 30, 2012 10:05:20 AM test.t100.t001.ArrayListSpeed main
INFO: Creating entries.
Nov 30, 2012 10:05:21 AM test.t100.t001.ArrayListSpeed main
INFO: Searching..
Nov 30, 2012 10:05:21 AM test.t100.t001.ArrayListSpeed main
INFO: Searching 'dark' 333716
Nov 30, 2012 10:05:21 AM test.t100.t001.ArrayListSpeed main
INFO: Searching 'light' 333333
Nov 30, 2012 10:05:22 AM test.t100.t001.ArrayListSpeed main
INFO: Searching 'plain' 332951
代码
package test.t100.t001;
import java.util.ArrayList;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ArrayListSpeed {
public static String[] PREFIX = {"Dark ", "Light ", "Plain "};
public static String[] COLOR = {"Red", "Green", "Blue"};
public static String getColor(Random r) {
int val = r.nextInt(COLOR.length);
return COLOR[val];
}
public static String getPrefix(Random r) {
int val = r.nextInt(PREFIX.length);
return PREFIX[val];
}
public static int countPrefixes(ArrayList<String> list, String prefix) {
int count = 0;
for (String val : list) {
if (val.toLowerCase().startsWith(prefix.toLowerCase())) {
count++;
}
}
return count;
}
public static void main(String[] args) {
Logger logger = Logger.getAnonymousLogger();
ArrayList<String> list = new ArrayList<String>();
Random r = new Random();
logger.log(Level.INFO, "Creating entries.");
for (int ii=0; ii<1000000; ii++) {
list.add( getPrefix(r) + getColor(r) );
}
logger.log(Level.INFO, "Searching..");
logger.log(Level.INFO,
"Searching 'dark' " + countPrefixes(list,"dark"));
logger.log(Level.INFO,
"Searching 'light' " + countPrefixes(list,"light"));
logger.log(Level.INFO,
"Searching 'plain' " + countPrefixes(list,"plain"));
}
}
这篇关于有没有办法知道一个数组列表是否包含一段文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!