我同意为每个用户创建一个类的建议——这是面向对象的方式。所以我将它包含在下面的示例中。但是如果你想做数组或其他结构,你可能会很容易改变它。
但是,我要添加的是一种使用 Java 类java.util.regex.Pattern
并java.util.regex.Matcher
从输入字符串中一次性提取记录和字段的方法。(我还没有为 Android 编程,但我认为它们是可用的。)
该模式的一般计划是:(记录分隔符或无)(field1)(delim)(field2)(delim)(lastfield)(记录分隔符+输入的其余部分)
该算法基本上使用上述模式循环输入。该模式为字段提取各种组(取决于您的记录格式),然后还提取包含输入字符串其余部分的最后一个组。此余数用作下一个循环的新输入字符串。所以循环的每次迭代都会做一个记录。
这是您可以运行的更完整的示例代码。您可能需要研究正则表达式以理解模式,这是算法的重要部分。您可以从java.util.regex.Pattern
该类的 Javadoc 开始。
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestPatternMatch {
public static void main(String[] args) {
List<User> result = new ArrayList<>();
String input =
"Wilson#$20#$Male=@=Raymond#$25#$Male=@=Sophie#$30#$Female";
Pattern recPatt =
Pattern.compile("^(=@=|.{0})(.+?)#\\$(\\d+)#\\$(.+?)(?==@=)(.*$)");
// ^match start of line
// ^match record delimiter or nothing
// ^match name field (reluctant)
// ^match field delim
// ^match age field
// ^match field delim
// match gender field^
// zero-width (non recording) lookahead for record delimiter^
// match rest of line until end^
Matcher recMatcher;
String workStr = input; // start with whole input
while (workStr != null && workStr.length() > 0) {
recMatcher = recPatt.matcher(workStr);
if (recMatcher.matches() && recMatcher.groupCount() >= 5) {
result.add(
new User(
recMatcher.group(2), //name
Integer.parseInt(recMatcher.group(3)), //age
recMatcher.group(4) //gender
)
);
workStr = recMatcher.group(5); // use tail for next iteration
} else {
workStr = null;
}
}
System.out.println(result); //show result list contents
}
}
class User {
String name;
int age;
String gender;
/** All argument constructor */
public User(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
/** Show contents of object fields */
public String toString() {
return "User ["+ name + ", " + age + ", " + gender + "]";
}
}
基本模式结构可以重复用于许多不同的记录格式。