如何从字符串数组中删除前几个项目?

时间:2011-06-20 19:18:29

标签: java arrays string arraylist boolean

我有一个方法,它接受一个字符串数组,并根据长度查找每个项目的平均值。我希望该方法根据offset的值删除数组中的前几个项目。

public static double[] getMovingAverage(String[] priceList, int length, int offset){

    double[] newPriceList = convert(priceList);

    int listLength = newPriceList.length;
    int counter = 0;
    double listsum;
    double[] movingAverage = new double[listLength];

    try{
        for (int aa = 0; aa < listLength-1; aa++){
            listsum = 0;
            for (int bb = 0; bb < length; bb++){
                counter = aa+bb;

                listsum = listsum + newPriceList[counter];
            }
            movingAverage[aa] = listsum / length;
        }
        if (offset>0){

                        //remove first #offset# elements

        }
    }catch(Exception e){
        System.out.println(e);
    }
    return movingAverage;
}

*注意:convert();将String []转换为double []

6 个答案:

答案 0 :(得分:6)

数组在Java中是固定长度的。 (您无法更改数组的长度。)

但是,您可以很容易地删除第一个offset元素来创建一个新数组:

double[] movingAverage = { 0.1, 0.2, 1.1, 1.2 };
int offset = 2;

// print before
System.out.println(Arrays.toString(movingAverage));

// remove first offset elements
movingAverage = Arrays.copyOfRange(movingAverage, offset, movingAverage.length);

// print after
System.out.println(Arrays.toString(movingAverage));

<强>输出:

[0.1, 0.2, 1.1, 1.2]
[1.1, 1.2]

答案 1 :(得分:2)

来自Java 6 API

  

public static double []   copyOfRange(double [] original,                                      int来自,                                      int to)

     

复制指定的范围   将指定的数组转换为新数组。该   范围的初始索引(from)必须   介于零和original.length之间,   包括的。原始值[来自]   放在初始元素中   副本(除非来自==   original.length或from == to)。值   从后来的元素   原始数组被放入   副本中的后续元素。该   范围的最终索引(to),其中   必须大于或等于,   可能大于original.length,   在这种情况下,0d放在所有   索引为的副本的元素   大于或等于   original.length - 来自。的长度   返回的数组将是 - from。

     

参数:original - 来自的数组    从哪个范围复制 -    范围的初始索引    复制,包括 - 最终索引    要复制的范围,独占。    (这个指数可能在...之外    数组。)

     

返回:一个新数组   包含指定范围   原始数组,截断或   用零填充以获得   所需长度

     

抛出:   ArrayIndexOutOfBoundsException - 如果   来自&lt; 0或来自&gt; original.length()   IllegalArgumentException - 如果来自&gt;   到NullPointerException - 如果是原始的   是null因为:   1.6

答案 2 :(得分:2)

而不是删除项目,为什么不只是创建一个较小尺寸的新列表作为输出,并始终使用index-offset作为其索引?

答案 3 :(得分:1)

也许其中一个Arrays.copyOfRange()方法会做什么?

http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOfRange(boolean[], int, int)

答案 4 :(得分:1)

您无法从数组中显式删除,但您可以使用其他数据结构(如ArrayList)来累积结果。但是,在您的情况下,您可能只想更改代码以正确调整数组大小,即。

 double[] movingAverage = new double[listLength-offset];

    for (int aa = 0; aa < listLength-offset; aa++){

答案 5 :(得分:1)

为了防止复制数组,可以使用像LinkedList这样的集合类,它从头部删除操作。

http://download.oracle.com/javase/6/docs/api/java/util/LinkedList.html