2016-06-15 2 views
-1

У меня есть строка следующим образом, и я разделяю параметры (TransactionType, ServiceID, PaymentID, OrderNumber, Amount), как показано ниже.Разделить динамическую строку в java

String response = "TransactionType=SALE&ServiceID=TV3&PaymentID=PYID2016061501417701&OrderNumber=2016061501417701&Amount=235.00" 

String splitParams[] = res.split("&"); 
     String TransactionType = splitParams[0].substring(splitParams[0] 
       .indexOf("=") + 1); 
     String ServiceID = splitParams[1].substring(splitParams[1] 
       .indexOf("=") + 1); 
     String PaymentID = splitParams[2].substring(splitParams[2] 
       .indexOf("=") + 1); 
     String OrderNumber = splitParams[3].substring(splitParams[3] 
       .indexOf("=") + 1); 
     String amount = splitParams[4].substring(splitParams[4] 
       .indexOf("=") + 1); 

Но проблема в том, что эти параметры не отправляются по порядку, а иногда некоторые параметры не отправляются. Есть ли способ разделить параметры в строке с помощью java на основе имени параметра?

+2

Почему вы не создать 'Map' вместо этого? – Kayaman

+0

Как я понимаю, у вас есть фрагмент URL. Я думаю, вы могли бы найти множество ответов здесь: http://stackoverflow.com/questions/13592236/parse-a-uri-string-into-name-value-collection, большинство из которых касается URL-адреса, но оно должно соответствовать также только часть параметра. – Adomas

ответ

4

Вы можете использовать гуавы Splitter, как это:

Map<String, String> responseMap = Splitter.on("&") 
     .omitEmptyStrings() 
     .trimResults() 
     .withKeyValueSeparator("=") 
     .split(response); 

И тогда вы могли бы получить значения, как, что:

String TransactionType = responseMp.get("TransactionType "); 
+0

Я получаю ошибку «Метод сKeyValueSeparator (String) не определен для типа Splitter». Я добавил «com.google.guava_1.6.0.jar». Можете ли вы, пожалуйста, помочь с этим? – dmaprasad

+0

@dmaprasad Эта функция предназначена только для Google Guava, если вы хотите ее использовать, вам необходимо импортировать ее, как импорт com.google.common.base.Splitter; –

+0

Я импортировал как com.google.common.base.Splitter ;. Но такой же результат. не работает. У тебя есть идея. Очень ценю помощь – dmaprasad

1

Попробуйте это:

String response = "TransactionType=SALE&ServiceID=TV3&PaymentID=PYID2016061501417701&OrderNumber=2016061501417701&Amount=235.00"; 

Map<String,String> responseMap = Arrays.asList(response.split("&")).stream(). 
    map(v-> v.split("=")).collect(Collectors.toMap(a-> a[0],a ->a[1])); 



System.out.println(responseMap); 

выход:

{TransactionType = РЕАЛИЗАЦИЯ, сумма = 235,00, PaymentID = PYID2016061501417701, ORDERNUMBER = 2016061501417701, ServiceID = TV3}

+0

Спасибо за комментарий. Выше ответ действительно соответствует моему требованию. – dmaprasad

+0

@dmaprasad приветствую вас –

Смежные вопросы