nfsquake
nfsquake

Reputation: 211

String to Java object

How do I convert the following String to a Person object ?

String content:

String testString = "John|23;Ron|22;Don|32"

Person class:

public class Person{
   private String name;
   private String age;
   //getters and setters for name and age
}

Is there any utility class to convert the testString to Person objects based on the delimiters ";" and "|"

Upvotes: 1

Views: 158

Answers (4)

user508434
user508434

Reputation:

It is not in standard format like json, so you would need to write your own parser. For example, here is the Person class that does what you want:

public class Person {
    private final String name;
    private final int age;

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

    public static Collection<Person> parse(String input) {
        Collection<Person> persons = new HashSet<Person>();
        for (String s : input.split(";")) {
            String[] properties = s.split("\\|");
            persons.add(new Person(properties[0], Integer.parseInt(properties[1])));
        }
        return persons;
    }

    public static void main(String[] args) {
        String testString = "John|23;Ron|22;Don|32";
        System.out.println(parse(testString));

    }

}

If it was in json you could use a json parser.

Upvotes: 2

RMachnik
RMachnik

Reputation: 3684

This might be done in that way.

 public class Person{
      private String name;
      private String age;

        public Person(){}:


       public static List<Person> gerPersons(String personString){
            List<Person> result = new ArrayList<Person>();
            String[] presonsTab = personString.split(";");
            for(String p : personsTab){
              Person person = new Person();
              String personTab = p.split("|");
              if(personTab.length!=2)
                 throw new RuntimeException("Provide proper String");
              person.setName(personTab[0]);
              person.setAge(personTab[1]);
              result.add(person);

          }
          return result;

        }

        public void setName(String n){ this.name = n;}
        public void setAge(String a){this.age = a;}


  }

Upvotes: 1

Smutje
Smutje

Reputation: 18143

No, you have to write your own parser, because no one could know why to associate the first value to "name" and the second one to "age" - although Reflection could help, but that would be a big overhead for such a task.

For parsing, you could first split at ";" and then for every split array element, split at "|", iterate this array and fill the Person according to the array iteration.

Upvotes: 4

Not easily; that's not really a standard format. My advice would be to write a static fromString method on Person, and then call Person.fromString() on each item returned by testString.split(";").

Upvotes: 4

Related Questions