2016-03-28 11 views
-2

内の文字列を解析するパーサーを作成する方法Javaで以下の文字列のためのパーサを書くためにどのようにJavaの

"SiteId:BLR232#Latitude:12.918444#Longitude:77.5940136#NetworkType:4g#Type:NONE#Type of Complaint:Call Drop#Sample Number:7022979575#Problem Description:agshjs vshsijsb#"

ので、結果出力は、ハッシュマップのJavaになります

Key = SiteId, Value = BLR232 
Key = Type, Value = NONE 
Key = Problem Description, Value = agshjs vshsijsb 
Key = Sample Number, Value = 7022979575 
Key = NetworkType, Value = 4g 
Key = Latitude, Value = 12.918444 
Key = Type of Complaint, Value = Call Drop 
Key = Longitude, Value = 77.5940136 

私が使用してみましたPattern p = Pattern.compile("(\\w+):(\\w+)");しかし、私は必要なものを正確に動作していません。

+0

。私が必要とするものはまったく動作していません –

+4

私は['([^#:] +):([^#] +)'](https://regex101.com/r/kL9iY8/2)で十分であると思います。あるいは、 '#'で分割し、各チャンクを ':'で分割します。 –

+0

または '([^:] +):([^#] +)#' –

答えて

2

お客様の(\w+):(\w+)は、:の前とその後の1つの単語にのみ一致します。レコード区切り文字として#、キー値区切り文字として:があるので、ちょうど\wクラスに依存することはできません。あなただけのキーと値のペアに#で文字列を分割して問題を解決してから:で各キーと値のペアを分割することができ

注:

String str = "SiteId:BLR232#Latitude:12.918444#Longitude:77.5940136#NetworkType:4g#Type:NONE#Type of Complaint:Call Drop#Sample Number:7022979575#Problem Description:agshjs vshsijsb#"; 
String[] kvps = str.split("#"); 
Map<String, String> res = new HashMap<String, String>(); 
for(String kvp : kvps) { 
    String[] parts = kvp.split(":"); 
    res.put(parts[0], parts[1]); 
    System.out.println(parts[0] + " - " + parts[1]); // just demo 
} 

あなたが必要な場合はIDEONE demo

を参照してください。正規表現を使用する場合は、Matcher#find()と次のパターンを使用できます。

([^#:]+):([^#]+) 

説明:

  • ([^#:]+)から#:以外1+文字(したがって、我々は、キーと値のペアの内側に滞在し、キーと一致する)
  • : - リテラルのコロン
  • ([^#]+) - 1+ #以外の文字(したがって、#までの値に一致します)。

iはパターンp = Pattern.compileを( "(\\ W +):(\\のW +)")を使用しようとした参照regex demo

関連する問題