您可以使用正則表達式來解析每個String
並將鍵 - >值對放入Map
。這將允許您在需要時訪問其他值。
所有你需要做的是,在循環中,您可以通過Map
的密鑰並將其解析到float
並檢查它的價值
public static void main(String[] args) throws ParseException {
final String[] strings = new String[]{
"[Name: Bob][age: 27][cprNumber: 1234][group: A][Active: true][Average Grade: 4.1]",
"[Name: Alice][age: 17][cprNumber: 4321][group: A][Active: true][Average Grade: 4.5]",
"[Name: James][age: 33][cprNumber: 2134][group: B][Active: true][Average Grade: 2.2]",
"[Name: Frank][age: 23][cprNumber: 3124][group: B][Active: false][Average Grade: 3.1]"
};
final Pattern pattern = Pattern.compile("\\[([^:]++):\\s([^]]++)]");
final Collection<Float> grades = new LinkedList<Float>();
for (final String string : strings) {
final Map<String, String> map = new HashMap<>();
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
final String key = matcher.group(1).trim();
final String value = matcher.group(2).trim();
map.put(key, value);
}
System.out.println(map);
final float grade = Float.parseFloat(map.get("Average Grade"));
if (grade > 4) {
grades.add(grade);
}
}
}
輸出:
{Name=Bob, Active=true, cprNumber=1234, age=27, Average Grade=4.1, group=A}
{Name=Alice, Active=true, cprNumber=4321, age=17, Average Grade=4.5, group=A}
{Name=James, Active=true, cprNumber=2134, age=33, Average Grade=2.2, group=B}
{Name=Frank, Active=false, cprNumber=3124, age=23, Average Grade=3.1, group=B}
[4.1, 4.5]
這個例子有一個String[]
,但使用List
將沒有區別。
你可以創建一個Object
來保存值 - 這將是一個更OO的方法。
EDIT
下面是使用spilt
一個例子。這是一個很多硬編碼 -
public static void main(String[] args) throws ParseException {
final String[] strings = new String[]{
"[Name: Bob][age: 27][cprNumber: 1234][group: A][Active: true][Average Grade: 4.1]",
"[Name: Alice][age: 17][cprNumber: 4321][group: A][Active: true][Average Grade: 4.5]",
"[Name: James][age: 33][cprNumber: 2134][group: B][Active: true][Average Grade: 2.2]",
"[Name: Frank][age: 23][cprNumber: 3124][group: B][Active: false][Average Grade: 3.1]"
};
final Collection<Float> grades = new LinkedList<Float>();
for (final String string : strings) {
final String[] values = string.split("[\\[\\]]+|:");
final float gpa = Float.parseFloat(values[12].trim());
if (gpa > 4) {
grades.add(gpa);
}
}
System.out.println(grades);
}
輸出是一樣的:
[4.1, 4.5]
「ArrayList」中的行是如何存儲的?作爲字符串? – 2013-04-22 20:16:36
是作爲字符串... – 2013-04-22 20:24:11
如果不是存儲的行視爲字符串,你創建的對象的線模型這會容易得多。 – 2013-04-22 20:26:29