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
作为结构化数据类型,但事实并非如此。它是非结构化的通用数据。这并不是代码中要处理的最佳数据类型。AList
是错误的数据结构。您应该考虑将字符串解析成两个部分,即<代码>日期>代码>另一个对象(<代码>现金流< /代码>?),并使用<代码> 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()
保持一致(除非您知道对于这个用例,异常更有用,但这在很大程度上取决于上下文)。感谢您的建议和实施解决方案所花的时间。感谢您的建议和实施解决方案所花的时间。