2016-06-21 3 views
1
{ 
    "TEST":"189456", 
    "TEST1":"X_Y_Z", 
    "TEST2":"Y_Z_W", 
    "TEST3":"GGG ", 
    "TEST4":"32423423233322" 
}, 
{ 
    "TEST":"123456", 
    "TEST1":"X_E_Z", 
    "TEST2":"T_Z_W", 
    "TEST3":"EWE ", 
    "TEST4":"324234243234" 
} 

Dies ist eine .txt Datei, die ich mir helfen, nur 189456,123456 aus dem obigen file.Can jemand lesen und drucken mag den Code this.Please findet dabei für reference.please die einfachste Code schreiben .....eine Reihe von Werten aus einer Textdatei lesen

Pattern p = Pattern.compile("\"Test\"\\s*:\\s*\"(.*)\"", Pattern.CASE_INSENSITIVE); 

     while ((line = bf.readLine()) != null) { 
      linecount++; 

      Matcher m = p.matcher(line); 

      // indicate all matches on the line 
      while (m.find()) { 

       System.out.println(m.group(1)); 
      } 
     } 
+1

Obwohl die Endung 'ist' '.txt''', warum gehst du nicht lies es als json ein? –

+1

Was ist falsch an dem von Ihnen bereitgestellten Code? – Fildor

+0

Kann nur 'if (line.contains (" 189456 ") || line.contains (" 123456 "))' – alovaros

Antwort

1

Wie für eine Regex Lösung:

(.*)\"TEST":\"(.*?)\" 

Notiere die ?, macht es Ihre Wieder gex um beim ersten Spiel von " anzuhalten.

mit Leerzeichen dazwischen:

(.*)\"TEST"\s*:\s*\"(.*?)\" 
+0

Ausgezeichnete Antwort danke :) – Manu

0

Hoffe, dass ich die Frage richtig verstanden: D

String saveData; 
Pattern p = Pattern.compile("\"Test\"\\s*:\\s*\"(.*)\"", Pattern.CASE_INSENSITIVE); 

while ((line = bf.readLine()) != null) { 
    linecount++; 

    Matcher m = p.matcher(line); 

    // indicate all matches on the line 
    if(line.contains("189456") || line.contains("123456")) { 
     saveData = line; 
    }  
} 

wenn der String Sie von readLine() erhalten die gesuchte Zeichenfolge enthält sie es in speichereDaten sparen

+0

Das wird nicht einmal kompilieren. – Fildor

+0

für nur zwei Datensätze zu drucken, das ist in Ordnung, aber für mehrere Datensätze ... das ist mehr als 2 Zeilen? – Manu

+0

Jetzt kompiliert es aber noch Lichtjahre von der Anforderung entfernt. – Fildor

2

Ein anderer Weg, es zu tun:

while ((line = br.readLine()) != null) { 
    if(line.contains("\"TEST:\"")){ 
     String[] lineValues = line.split(":"); 
     System.out.println(lineValues[1].replace("\"", "").replace(",",""));   
    }  
} 
+0

Sie haben vergessen "," ... – Fildor

+0

Bearbeitet, danke: D –

1

Mit der bereitgestellten Eingabe sollten Sie es als JSON anstelle von Rohtext lesen.

com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); 
     List<TestObj> test = new ArrayList<TestObj>(); 
     test = mapper.readValue(new File("c:\\YourFile.txt"), test.getClass()); 

Wo TestObj so etwas wie dieses:

class TestObj { 
    String test; 
    String test1; // You should use json annotation here because it does not match your json field name. 
    ... 
    // getter setter methods 
} 
0
FileInputStream fstream = new FileInputStream("D:\\prac\\src\\test.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 

    String strLine; 
    while ((strLine = br.readLine()) != null) { 
     if(strLine.contains("\"TEST\":")){ 
      System.out.println(strLine.split(":")[1].replaceAll("\"","").replace(",","")); 
     } 
    } 

    br.close(); 
} 

Ausgang:

189456 
123456