gpt4 book ai didi

java - 拆分数组并组织成多个数组的有效方法

转载 作者:行者123 更新时间:2023-11-29 06:39:00 25 4
gpt4 key购买 nike

我得到一个包含多个用户详细信息的 String[]。像这样:

Wilson#$20#$Male=@=Raymond#$25#$Male=@=Sophie#$20#$Female

我想将字符串拆分并组织成多个数组。例如一个数组用于 Name,一个数组用于 Age,另一个数组用于 Gender。到目前为止,我设法将 String[] 拆分成了这样的东西。

String[] User = student.split("=@=");

User[0] = Wilson#$20#$Male
User[1] = Raymond#$25#$Male
User[2] = Sophie#$20#$Female

我真的不知道如何从这一点开始组织它。非常感谢任何评论和回答!

编辑

Wilson#$20#$Male=@=Raymond#$25#$Male=@=Sophie#$20#$Female

上面的部分实际上是一个从服务器返回的值,我想处理这个值。谢谢大家的回复。我想我在理论上理解了一点,但我在实现代码时遇到了一些问题。

最佳答案

我同意为每个用户创建一个类的建议——这是面向对象的方式。所以我把它包含在下面的例子中。但是如果你想做数组或其他一些结构,你可能会很容易地改变它。

不过,我想添加的是一种使用 Java 类 java.util.regex.Patternjava.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 + "]";
}
}

基本模式结构可以重复用于许多不同的记录格式。

关于java - 拆分数组并组织成多个数组的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15244180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com