Java 如何访问这些索引

Java 如何访问这些索引,java,Java,我的名单如下: 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.i

我的名单如下:

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;
}
//向前遍历列表以获取第一个索引
私有静态int getFirstIndex(列表,字符串toFind){
对于(int i=0;i=0;i--){
if(列表获取(i).startsWith(toFind)){
返回i;
}
}
返回-1;
}

这两种方法将完全满足我想要的要求。谢谢大家

任何内置方法都无法做到这一点

您有两个选择:

  • 手动迭代列表并使用
    startsWith()
    (或
    indexOf()
    ,具体取决于您想要什么)或
  • 将数据结构更改为
    映射
    ,并使用日期作为键

  • 一般来说,您试图使用
    String
    作为结构化数据类型,但事实并非如此。它是非结构化的通用数据。这并不是代码中要处理的最佳数据类型。

    A
    List
    是错误的数据结构。您应该考虑将字符串解析成两个部分,即<代码>日期>代码>另一个对象(<代码>现金流< /代码>?),并使用<代码> 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);
    
    //将字符串解析为日期和现金流对象
    日期八月=。。。
    现金流=。。。
    Map Map=newhashmap();
    普特地图(8月,流量);
    //后来。。。
    现金流c=map.get(八月);
    
    我会写一个函数

    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;
    }
    
    public static int getIndexOf(列表数组,字符串stringToFind)
    {
    对于(int i=0;i
    只需遍历列表,搜索字符串,然后返回所需内容。否则,如果未找到,则返回-1


    抱歉修复了更多的拼写问题。他提出了严格的问题,我给出了严格的答案。如果语句可以修改以适合他想要的任何搜索样式。是的,我调用了我的列表数组,因为键入太草率。

    如果我真的必须在没有
    映射的情况下这样做,我会这样做

    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;
    }
    
    public int getIndex(列表x,字符串键)
    {
    布尔值=false;
    int指数=0;
    for(字符串s:x)
    {
    如果(s.StartWith(钥匙))
    {
    发现=真;
    打破
    }
    索引++;
    }
    如果(!找到)
    {
    指数=-1;
    }
    收益指数;
    }
    
    您可以编写这样的新类:

    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;
        }
    }
    
    class SpecialArrayList扩展了ArrayList{
    @凌驾
    public int indexOf(对象o){
    对于(int i=0;i
    然后你可以使用

    List<String> x = new SpecialArrayList<String>();
    
    List x=new specialraylist();
    

    但正如在其他答案中提到的,查找这样的字符串并不是最好的样式。您可以更改“indexOf”方法的标准行为。最好编写此“search”或“startswith”函数名清晰,没有其他标准含义。

    恐怕您必须遍历
    列表
    ,并用正则表达式检查每个项,或者至少比较子字符串(如果总是以相同的形式
    映射
    ),这应该会有所帮助。您是否可以用类替换
    字符串
    ode>日期
    收入
    ,和
    费用
    获取者/设定者?这将允许更干净的代码。但是列表中的字符串与他在技术上寻找的字符串不同。这是一个正确的答案,但我担心这将使OP走向错误的方向(即严格类型编程).Micro-nitpick:
    列表
    参数为什么被称为
    数组
    ?;-)主要的挑剔:
    字符串字符串查找
    :)感谢您的建议和实施解决方案所花的时间。在
    中!找到
    案例我将返回
    -1
    以与
    indexOf()
    保持一致(除非您知道对于这个用例,异常更有用,但这在很大程度上取决于上下文)。感谢您的建议和实施解决方案所花的时间。感谢您的建议和实施解决方案所花的时间。