2016-03-28 19 views
-2

dizeyi ayrıştırmak için ayrıştırıcı yazmak içinjava aşağıda dize için ayrıştırıcı yazmak için 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#"

böylece sonuç çıktı HashMap java olacak

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 

kullanıyorum çalıştı Pattern p = Pattern.compile("(\\w+):(\\w+)"); ama tam olarak ihtiyacım olan şey çalışmıyor.

+0

; ama tam olarak ne ihtiyacım yok –

+4

Bence ['([^ #:] +): ([^ #] +)'] (https://regex101.com/r/kL9iY8/2) yeterli olmalı. Ya da '#' ile ayrılır ve her bir parçayı ':' ile ayırır. –

+0

veya '([^:] +): ([^ #] +) #' –

cevap

2

Sizin (\w+):(\w+) yalnızca :'dan önce ve ondan sonra tek sözcüklerle eşleşir. Bir kayıt ayırıcı olarak # ve anahtar değeri sınırlayıcı olarak : var, bu nedenle yalnızca \w sınıfına güvenemezsiniz. Eğer gerekiyorsa

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

bakınız: sen sadece o anahtar-değer çiftleri içine # ile dize bölme ve ile sorunu çözebilir

Not : ile her anahtar-değer çifti ayırmak elbette regex, sen Matcher#find() ile aşağıdaki deseni kullanabilirsiniz:

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

Açıklama:

  • ([^#:]+) - # ve : dışında 1+ karakter (olup, bu amaçla önemli değer çifti içinde kalmak ve anahtar eşleşen)
  • : - değişmez bir kolon
  • ([^#]+) - 1+ # dışındaki karakterler (bu nedenle, değeri #'a kadar eşleştiriyoruz.

bakınız regex demo

ı ("() w + \\: (\\ w +)") Desen p = Pattern.compile kullanılarak denemiş