Конструктор Java со строковыми параметрами

#java #constructor

#java #конструктор

Вопрос:

Как я могу извлечь значения атрибутов из строкового параметра?

 public class Pays{
public Pays(String paysDescriptions) {
        //implementation
    }

}
pays= new Pays("p1:Europe:France, p2:Amerique:Canada");
  

Редактировать:

Я дал ответ ниже людям, которые никогда не использовали этот тип конструктора (например, я: p ) и которым могут понадобиться некоторые объяснения.

Комментарии:

1. Вы просто перепутали с запятой в вашей строке. Это одна строка, заключенная в один набор кавычек, следовательно, один параметр для вашего конструктора.

2. Что именно вы не понимаете? Вы создаете новый Pays объект с одним строковым параметром paysDescriptions = "p1:Europe:France, p2:Amerique:Canada"

3. @MadMatts спасибо за ваш комментарий.. Я не могу понять, как я могу получить доступ к атрибутам pays.. У меня есть TestCase, и я должен создать реализацию класса

4. @JunedAhsan да, я знаю, что это только одна строка, но я не могу понять, как я могу ею манипулировать

5. Потому что это другая функция, которая имеет параметр as, например: p1 as paysId или Europe as Country

Ответ №1:

Вы должны попробовать использовать String.split(регулярное выражение строки) API.

  1. Разбейте параметр paysDescriptions с помощью запятой( , ) как regex , затем
  2. Разбейте отдельные элементы с помощью двоеточия ( : ) как regex

Пример:

 public Pays(String paysDescriptions) {
    String[] split_1 = paysDescriptions.split(",");
    for (String split : split_1) {
        String[] split_2 = split.split(":");
        for (String sp : split_2) {
            System.out.println(sp); // use sp.trim() if spaces after comma
                                    // not required.
        }
    }
}
  

Комментарии:

1. спасибо за ваш ответ, это было именно то, что я сделал.. Я использовал хэш-карту .

2. Я рад, что вы нашли это полезным. Пожалуйста, примите один ответ, чтобы этот вопрос не отображался в открытом состоянии.

Ответ №2:

Я неправильно понимаю логику, потому что я впервые вижу такой конструктор..У меня есть только модульный тестовый класс, и я должен реализовать код для исходного. Итак, я использовал a Map<String,String[]> для разделения параметров, а затем я могу получить доступ к различным атрибутам моего класса.

 Map<String, String[]> paysMap = new HashMap<String, String[]>(); 
    public Pays(String paysDescriptions) {

        String s = paysDescriptions;
        String[] pairs = s.split(",");
        for (int i=0;i<pairs.length;i  ) {
            String pair = pairs[i];
            String[] keyValue = pair.split(":");
            paysMap.put(String.valueOf(keyValue[0]),new String[]  {String.valueOf(keyValue[1]), String.valueOf(keyValue[2])});

        }
    }