我有一个List如下:
List<String> x = new ArrayList<String>();
x.add("Date : Jul 15, 2010 Income : 8500 Expenses : 0");
x.add("Date : Aug 23, 2010 Income : 0 Expenses : 6500");
x.add("Date : Jul 15, 2010 Income : 0 Expenses : 4500");
我现在想要访问这些权限,如下所示:
int index1 = x.indexOf("Date : Aug 23, 2010");
//1
int index2 = x.indexOf("Date : Jul 15, 2010");
//0
int index3 = x.lastIndexOf("Date : Jul 15, 2010");
//2
有任何帮助吗?提前谢谢。
这是我正在寻找的解决方案:
// traverse the List forward so as to get the first index
private static int getFirstIndex(List<String> theList, String toFind) {
for (int i = 0; i < theList.size(); i++) {
if (theList.get(i).startsWith(toFind)) {
return i;
}
}
return -1;
}
// traverse the List backwards so as to get the last index
private static int getLastIndex(List<String> theList, String toFind) {
for (int i = theList.size() - 1; i >= 0; i--) {
if (theList.get(i).startsWith(toFind)) {
return i;
}
}
return -1;
}
这两种方法将完全符合我想要的要求。谢谢所有人!
答案 0 :(得分:6)
使用任何内置方法都无法做到这一点。
您有两种选择:
startsWith()
(或indexOf()
,具体取决于您想要的内容)或 Map<String,String>
,并使用日期作为密钥。一般来说,您尝试将String
用作结构化数据类型,但并非如此。它是非结构化的通用数据。这并不是代码中处理的最佳数据类型。
答案 1 :(得分:1)
List
是您似乎想要执行的操作的错误数据结构。您应该考虑将字符串解析为两个部分,Date
和另一个对象(也许是CashFlow
?)并使用Map
来关联这两个部分。
然后你可以做到以下几点:
//Parse the string into a Date and CashFlow object
Date august = ...
CashFlow flow = ...
Map<Date, CashFlow> map = new HashMap<>();
map.put(august, flow);
//Later...
CashFlow c = map.get(august);
答案 2 :(得分:0)
我会写一个函数
public static int getIndexOf(List<String> array, String stringToFind)
{
for(int i = 0; i < array.size(); i++)
if(array.get(i).contains(stringToFind);
return i;
return -1;
}
只需遍历列表,搜索字符串,然后返回您想要的内容。否则返回-1,如果没有找到。
抱歉修复了更多拼写问题。他提出了串行问题,我给出了严格的回答。如果声明可以修改,以适应他想要的任何搜索风格。是的,我打电话给我的列表阵列是因为输入的麻烦。
答案 3 :(得分:0)
如果我真的必须在没有Map
的情况下这样做,我会这样做;
public int getIndex(List<String> x, String key)
{
boolean found = false;
int index = 0;
for (String s: x)
{
if (s.startsWith(key))
{
found = true;
break;
}
index++;
}
if (!found)
{
index = -1;
}
return index;
}
答案 4 :(得分:0)
你可以写一个像这样的新类:
class SpecialArrayList<String> extends ArrayList<String>{
@Override
public int indexOf(Object o) {
for (int i = 0; i < this.size(); i++) {
java.lang.String t = (java.lang.String)this.get(i);
if (t.startsWith((java.lang.String) o)) {
return i;
}
}
return -1;
}
}
然后你可以使用
List<String> x = new SpecialArrayList<String>();
但正如其他答案中所提到的,寻找像这样的字符串并不是最好的风格。您将更改“indexOf”方法的标准行为。更好的方法是将这个“搜索”或“启动”功能写成一个明确的名称,而这个名称不会与其他标准含义一起使用。