2016-04-07 19 views
0

kullanılarakJava Dize Bölünmüş/ayrıştırma sorunu ben değeri olabilir Dize veri Akışı sahip normal ifade

system_id "2.2.2.1" 
component_id 6 
sequence_number 11 
timestamp 1459202982 

kv { 
    key "val1" 
} 
kv { 
    key "val2" 
} 
kv { 
    key "val3" 
} 

system_id "2.2.2.1" 
component_id 6 
sequence_number 15 
timestamp 1459202982 

kv { 
    key "val4" 
} 
kv { 
    key "val5" 
} and so on.... 

i ilgileniyorum Tüm ....

val1, val2, VAL3 olan anahtarın değeridir dosyası "kv {" ile başlatıldığında aşağıda gösterildiği gibi tarayıcı kullanıyorum

,

scan = new Scanner(new File("kvfiles/file1")).useDelimiter("\\s+kv\\s+\\{\\s+"); //To ignore any thing before "kv" 

while (scan.hasNext()) { 
       String str = scan.next(); 
       finalString = str.split("\\s+\\}")[0]; 
} 

Bu kod iyi çalışıyor ancak dosya söz değerinin altında, ayrıştırıcı hata veriyor ile başlatılır yukarıdaki durumda.

system_id "2.2.2.1" 
    component_id 6 
    sequence_number 11 
    timestamp 1459202982 

Bu bilgi bloğunu nasıl atlayabilirim?

Not: Bu veri bloğu zaman zaman bazı "kv {}" etiketlerinden sonra gelebilir, tek ihtiyacım olan şey geldiğinde yoksaymaktır.

+0

Lütfen hata hakkında ayrıntılı bilgi verin. –

+0

[Bu tanıtım] (http://ideone.com/oQxT22) beklendiği gibi çalışıyor mu? –

cevap

1

Neden sadece ilginç çizgiyi almıyorsunuz?

public class Test { 

    public static void main(String[] args) throws FileNotFoundException { 
     Pattern p = Pattern.compile("\\s+key.+"); 

     Scanner sc = new Scanner(new File("src/main/resources/test.txt")); 
     while (sc.hasNextLine()) { 
      sc.nextLine(); 
      String theLineYouWant = sc.findInLine(p); 
      // scnn this line again here 
      if (theLineYouWant != null) { 
       System.out.println(theLineYouWant); 
      } 
     } 
    } 
} 

Lütfen yukarıda belirtilen dosyanın yalnızca kendi test dosyam olduğunu unutmayın.

+0

Bu kalıp derleme değil "ana" iş parçacığında özel durum java.util.regex.PatternSyntaxException: Bilinmeyen karakter özelliği adı {+} near indeks 3 ^ \ p + key. + $ ^ – Ammad

+0

LineYouWant'ı seçmek mümkün mü? "}" olana kadar her şey karşılaşır mı? Bu aynı zamanda kv { anahtar "val3" veri "53" } – Ammad