#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>();