在应用程序中,具有以下格式的字符串:

字符串元素=“ [11,john,] [23,Adam,] [88,Angie,] ...”(...表示字符串中还有更多元素)

从给定的字符串中,我必须创建一个用于名称ID(11、23、88,...)的ArrayList和一个用于名称(john,Adam,Angie等)的ArrayList。

我创建了两种方法:

private int getItemID(int listLocation, String inputString){
    int indexBeginning = inputString.indexOf("[", listLocation) + 1;
    int indexEnd = inputString.indexOf(",", listLocation) - 1;
    String sID = inputString.substring(indexBeginning, indexEnd);
    int result = Integer.parseInt(sID);
    return result;
}

private String getItemName(int listLocation, String inputString){
    int indexBeginning = inputString.indexOf(" ", listLocation) + 1;
    int indexEnd = inputString.indexOf(",", indexBeginning) - 1;
    String result = inputString.substring(indexBeginning, indexEnd);
    return result;
}


并打算在方法parseArrayString(String inputString)中使用这两种方法,虽然我尚未编写,但是可以通过以下方式工作:

private void parseCommunityList(String inputString){
        int currentLocation = 0;
        int itemsCount = count the number of "[" characters in the string
        for(int i = 0; i < itemsCount; i++)
        {
               currentLocation = get the location of the (i)th character "[" in the string;
               String name = getItemName(currentLocation, inputString);
               int ID = getItemID(currentLocation, inputString);
               nameArray.Add(name);
               idArray,Add(ID);
        }

    }


如果您能提出任何更简单的方法从给定的字符串创建两个ArrayList的方法,我将不胜感激。

谢谢!

最佳答案

我建议使用正则表达式,使用组捕获想要的元素。下面的示例创建一个Person对象的列表,而不是单个String s的列表-按照其他发布者的建议封装数据:

    List<Person> people = new ArrayList<Person>();

    String regexpStr = "(\\[([0-9]+),\\s*([0-9a-zA-Z]+),\\])";
    String inputData = "[11, john,][23, Adam,][88, Angie,]";

    Pattern regexp = Pattern.compile(regexpStr);
    Matcher matcher = regexp.matcher(inputData);
    while (matcher.find()) {
        MatchResult result = matcher.toMatchResult();

        String id = result.group(2);
        String name = result.group(3);

        Person person = new Person(Long.valueOf(id), name);
        people.add(person);
    }


和一个简单的类来封装数据:

public class Person {
    private Long id;
    private String name;

    public Person(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    // TODO equals, toString, hashcode...
}

07-28 02:59
查看更多