Java hashmap из команды python dict?

#java #parsing

#java #синтаксический анализ

Вопрос:

У меня странная проблема, которую я не совсем понимаю, как решить. Не мог бы кто-нибудь, пожалуйста, дать мне несколько советов по хэш-картам?

У меня есть переменная:

 /servlet/charting?base_color=greyamp;amp;chart_width=288amp;amp;chart_height=160amp;amp;chart_type=pngamp;amp;chart_style=manufund_pieamp;amp;3DSet=trueamp;amp;chart_size=smallamp;amp;leg_on=leftamp;amp;static_xvalues=10.21,12.12,43.12,12.10,amp;amp;static_labels=blue,red,green,purple"
  

Я в основном хочу, чтобы 10.21, 12.12, 43.12, 12.10 были связаны с синим, красным, зеленым, фиолетовым (в отображаемом порядке)

В python я создал метод, который делает это с:

 def stripChart(name):
    name = str(name)
    name = urlparse.urlparse(name)
    name = cgi.parse_qs(name.query)
    name = dict(zip( name['static_labels'][0].split(','), name['static_xvalues'][0].split(',')))
  

Не уверен, как это сделать на java. Пока у меня есть:

 URL imgURL = new URL (imgTag);
String[] result = imgURL.getFile().split("amp;");
 for (int x=0; x<result.length; x  )
     System.out.println(result[x]);
  

Это дает мне:

 chart_width=288
chart_height=160
chart_type=png
chart_style=manufund_pie
3DSet=true
chart_size=small
leg_on=left
static_xvalues=10.21,12.12,43.12,12.10,
static_labels=blue,red,green,purple,
  

На данный момент я не понимаю, как связать значения static_labels и static_xvalues.

Большое спасибо. Любые указатели были бы потрясающими.

Ответ №1:

Вы хотите взглянуть на StringTokenizer

Что-то вроде этого (предполагая, что вы сохранили метки в строке ‘static_labels’ и значения в строке ‘static_xvalues’):

 HashMap<String, Double> colorMap = new HashMap<String, Double>();
StringTokenizer labelTok = new StringTokenizer(static_labels, ",");
StringTokenizer valuesTok = new StringTokenizer(static_xvalues, ",");
while(labelTok.hasMoreElements()){
  assert(valuesTok.hasMoreElements());
  colorMap.put(labelTok.nextElement(), Double.parseDouble(valuesTok.nextElement()));
}
  

Ответ №2:

Посмотрите на использование java.util.HashMap. Допустим, вы сохранили параметры запроса static_xvalues и static_labels в соответствующие строковые переменные. Что-то вроде следующего создаст для вас сопоставление:

 String[] vals = static_xvalues.split(",");
String[] labels = static_labels.split(",");
HashMap<String,String> map = new HashMap<String,String>();
for (int i=0; i <  vals.length;   i) {
  map.put(labels[i], values[i]);
}
  

Вы не говорите, нужно ли сохранять xvalues как значения с плавающей точкой или нет. Если это так, вам нужно будет сначала преобразовать массив vals в массив с плавающей точкой (или Double) и соответствующим образом изменить создание экземпляра HashMap:

 HashMap<String,Float> = new HashMap<String,Float>();