2016-06-15 3 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を使用して文字列のパラメータを分割する方法はありますか?

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

をそして、あなたはそのような値を得ることができます::

+2

なぜあなたは 'Map'を代わりに作成しませんか? – Kayaman

+0

私が理解しているように、あなたはURLフラグメントを持っています。私はあなたがここで多くの答えを見つけることができると思う:http://stackoverflow.com/questions/13592236/parse-a-urststring-into-name-value-collection、それらのほとんどはURLを扱うが、パラメータ部分のみに – Adomas

答えて

4

あなたはこのようにグアバのスプリッタを使用することができ

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

エラー "メソッドwithKeyValueSeparator(String)が型スプリッタの定義されていません"が表示されます。 「com.google.guava_1.6.0.jar」を追加しました。それで助けてもらえますか? – dmaprasad

+0

@dmaprasadこの機能はGoogle Guavaからのものです。使用したい場合はimport 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、注文番号= 2016061501417701、サービスID = TV3}

+0

コメントありがとうございます。上記の答えは本当に私の要求に合っていた。 – dmaprasad

+0

@dmaprasadようこそ –