#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
aspaysId
илиEurope
asCountry
Ответ №1:
Вы должны попробовать использовать String.split(регулярное выражение строки) API.
- Разбейте параметр
paysDescriptions
с помощью запятой(,
) какregex
, затем - Разбейте отдельные элементы с помощью двоеточия (
:
) как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])});
}
}