在应用程序中,具有以下格式的字符串:
字符串元素=“ [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...
}