首页 > 解决方案 > 返回数组中以传递的初始值开头的字符串

问题描述

我有一个 .txt 文件,其中包含以下状态的数据:

AL,Alab,4860
AK,Alas,7415
AZ,Ariz,6908
AR,Arka,2988    

我制作了一个函数,它计算有多少状态以初始传递的状态开始:

public int CInitial(char initial) {
        int total = 0;
        for(int i = 0; i < states.length; i++) { //states is an array which includes all states present in the .txt file
        String testString = states[i].getName(); // getName gets the name of the states present in the .txt file
        char[] stringToCharArray = testString.toCharArray();
        for (char output : stringToCharArray) {
            if(initial == output) {
                total++;        
            }

        }   

    }
        return total; 
}

如果传递了“A”,这将返回数字 4,如果传递了任何其他首字母,则返回数字 0,因为有 4 个以字母“A”开头的状态。

现在如何创建一个新函数来传递一个字符并返回以该字符开头的所有状态的名称?例如,这是为此所需的初始返回类型,但是我在启动它时遇到了麻烦。该过程是否与我创建的countStatesCountByInitial函数相同?

public State[] CByInitial(char initial) {
        return new State[] {}; //to be completed    
    }   

标签: javaarraysstring

解决方案


是的,它将与countStatesCountByInitial. 主要区别在于每次找到匹配项时,都希望将状态添加到数组中。由于我们事先不知道数组的大小,我们可能想使用 aList来代替。

public State[] getStatesCountByInitial(char initial) {
    ArrayList<State> found = new ArrayList<>();

    // this is the same as before
    for(int i = 0; i < states.length; i++) {
        String testString = states[i].getName();
        char[] stringToCharArray = testString.toCharArray();
        for (char output : stringToCharArray) {
            if(initial == output) {
            // except here when you find a match, you add it into the list
            found.add(states[i]);        
            }
        }   
    }

    // return as array
    return found.toArray(new State[found.size()]);
}

正如 Patrick 所建议的,我们可以避免使用Listby usingcountStatesCountByInitial来初始化状态的大小。

public State[] getStatesCountByInitial(char initial) {
    int matchSize = countStatesCountByInitial(initial);
    States[] found = new States[matchSize];
    int foundIndex = 0;

    // this is the same as before
    for(int i = 0; i < states.length; i++) {
        String testString = states[i].getName();
        char[] stringToCharArray = testString.toCharArray();
        for (char output : stringToCharArray) {
            if(initial == output) {
                // except here when you find a match, you add it into the array
                found[foundIndex] = states[i];
                foundIndex++;
            }
        }   
    }

    // return the array
    return found;
} 

推荐阅读