在AS3中搜索数组不区分大小写的字母

时间:2014-10-22 08:08:24

标签: actionscript-3

我是ActionScript 3的绝对新手,我需要创建一个函数,搜索字母数组以查找特定字母并返回其索引。我已经找到了indexOf这是完美的。但我需要这个搜索不区分大小写。就像我的数组是这样的:

Array("a","B","c")

如果我正在寻找"A",则返回的索引将是0。 这有预定义的功能吗?

3 个答案:

答案 0 :(得分:2)

我认为没有预定义的功能。

但你可以写自己的。使用for循环并遍历数组,使用String.toLowerCase()临时更改数组值和检查值以进行检查。

实际上......要求你自己编写,就是要求你用脚射击自己。创建一个类ArrayUtils,将此函数填入其中。

/**
* Searches through an array for a case-insensitive string match.
* Attempts to imitate Array.indexOf where it can.
* @param arr The array to search through
* @param searchingFor The string to search for
* @param fromIndex Optional, an index to start searching at.
* @returns The index of the array that a match was found at (zero-indexed), or -1 if no match was found.
*/
public static function indexOfCaseInsensitiveString(arr:Array, searchingFor:String, fromIndex:uint = 0):int {
    var lowercaseSearchString:String = searchingFor.toLowerCase();
    var arrayLength:uint = arr.length;//Retrieving array length is expensive, optimization
    for(var index:uint = fromIndex; index < arrayLength; index++){
        var element:* = arr[index];
        if(element is String && element.toLowerCase() == lowercaseSearchString){
            return index;
        }
    }
    return -1;//It wasn't found in the array.
}

然后您可以通过ArrayUtils.indexOfCaseInsensitiveString(<your array>, <your string>)调用它。 fromIndex只是模仿常规indexOf(最少惊讶的原则;如果我说它是“indexOf不区分大小写的字符串搜索”,为什么会影响{{1} }?)。

答案 1 :(得分:0)

免责声明:我没有编译这段代码,这只是为了演示我将如何进行。 你应该检查空值和非字符串变量。你应该使用Vector。&lt; String&gt;而不是数组

不,没有。

最简单的方法:

    function getCaseInsensitiveIndexOf(needle:String, haystack:Array):int
    {
        var index:int = -1;
        if(needle != null)
        {
            index = haystack.indexOf(needle.toUpperCase());
            if(index == -1)
                index = haystack.indexOf(needle.toLowerCase());
        }
        return index;
    }

//贝娄是我的第一个答案,但它有点矫枉过正

您必须事先规范化阵列的内容。 你可能想要实际标准化它的副本,所以你不要丢失任何细节。

    function getNormalizedVersionOf(target:Array):Array
    {
        var copy:Array = [];
        for(var i:int = 0; i < target.length; i++)
        {
            copy[i] = (target[i] as String).toUpperCase();  // or .toLowerCase()
        }
        return copy;
    }

当您搜索时,搜索规范化副本

    function getItemIndex(searchFor:String):int
    {
        var s:String = searchFor.toUpperCase();
        return mNormalized.indexOf(s);  //if you have the copy array as a class member called mNormalized
    }

答案 2 :(得分:0)

可以使用

Regular Expressions来使用不区分大小写的标记来实现此目的。

function findTargetIndex(needle:String,heystack:Array):int
{
    var straw:String;
    var magnet:RegExp = new RegExp(needle,"i");//"i" flag makes the search case insensitive.
    //can also be done with magnet.ignoreCase = true;
    for (var x:int = 0; x < heystack.length; x++)
    {
        straw = heystack[x];
        if (straw.search(magnet) > -1) return x;
    }
    return -1;
}

上述函数将搜索数组,查找包含搜索字符串的任何元素。您只能通过更改RegExp;

将其限制为匹配整个字符串
var magnet:RegExp = new RegExp("^"+needle+"$","i");

^匹配字符串的开头,$匹配结尾,这意味着整个字符串必须与整个表达式匹配。