MST

星途 面试题库

面试题:Java字符串常用方法在复杂场景中的应用

假设有一个字符串,格式为'name:age:gender|name:age:gender|...',即由多个'姓名:年龄:性别'这样的子串通过'|'分隔组成。请编写Java代码,将每个子串解析成对应的对象,并存储在一个集合中。要求使用Java字符串处理的常用方法,如split、substring等,同时要考虑代码的健壮性和效率。
10.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.ArrayList;
import java.util.List;

class Person {
    private String name;
    private int age;
    private String gender;

    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getGender() {
        return gender;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

public class StringParser {
    public static List<Person> parseString(String input) {
        List<Person> personList = new ArrayList<>();
        if (input == null || input.isEmpty()) {
            return personList;
        }

        String[] parts = input.split("\\|");
        for (String part : parts) {
            String[] subParts = part.split(":");
            if (subParts.length == 3) {
                String name = subParts[0];
                try {
                    int age = Integer.parseInt(subParts[1]);
                    String gender = subParts[2];
                    personList.add(new Person(name, age, gender));
                } catch (NumberFormatException e) {
                    // 处理年龄格式不正确的情况
                    System.err.println("Invalid age format in part: " + part);
                }
            } else {
                // 处理子串格式不正确的情况
                System.err.println("Invalid part format: " + part);
            }
        }
        return personList;
    }

    public static void main(String[] args) {
        String input = "John:30:Male|Jane:25:Female";
        List<Person> result = parseString(input);
        for (Person person : result) {
            System.out.println(person);
        }
    }
}

上述代码实现了将给定格式的字符串解析为Person对象,并存储在List集合中的功能。代码做了如下处理:

  1. 健壮性处理
    • 检查输入字符串是否为空或null,如果是则返回空的List
    • 对每个子串按:进行分割后,检查分割后的数组长度是否为3,不是则提示格式不正确。
    • 对年龄部分进行NumberFormatException异常捕获,处理年龄格式不正确的情况。
  2. 效率考虑
    • 使用split方法将字符串按|:进行分割,这是Java字符串处理中较为高效的方式。
    • 使用ArrayList存储解析后的Person对象,ArrayList在添加元素方面有较好的性能。