2016-04-22 19 views
-1

我需要從文件中獲取字符串,在起始和結束字符串之間,而且在返回的字符串中,我需要在起始字符串之前有兩行。在java中的兩個字符串之間獲取字符串,之前兩行開始

例如,下面是我的字符串塊,我需要找到以「:25:RO68BTRL04701202281399XX」開頭並以「 - }」結尾的行,但還要返回前面兩行,在開始搜索字符串之前:

{1:F01BTRLRO22AXXX1111111111}{2:I940BTRLRO22XXXXN}{3:{108:047MSOG16103001F}}{4: <br /> 
:20:047RONCRT0028139901<br /> 
:25:RO68BTRL04701202281399XX<br /> 
:28C:00697/00001<br /> 
:60F:C160411RON580868,35<br /> 
:61:1604110411C537,91NTRFC31EIOP161020001<br /> 
:86:PLATI CARTELE AP 1351271 CALGIRA FCT.12138114 S I FCT.12145656 CALGIRA TR ANSILVANIA SRL RO81BTRL RO NCRT0278617701 36 BTRL RO2 2 Incasare OP canal ele ctronic<br /> 
:61:1604110411C279,44NTRF801EIOP161020101 
:86:12135020 12144465 AP11309 84 FANTASI STILL SRL FANT ASI STILL SRL RO56BTRL 001 01202N50350XX 16 BTRL RO22 Incasare OP canal elec tronic<br /> 
:61:1604110411C1149,41NTRF020EIOP161020002<br /> 
:86:CV F 12143919 12135600 EN IGMA COM SRL RO08BTRL 0200 1202D01120XX 159 BTRL RO22 Incasare OP canal elec tronic<br /> 
:61:1604110411C53,52NTRF325EIOP161020051<br /> 
:86: AP1383577 cv fact 1213519 0/ 31.03.20 16 reincarcari electronice GLISSANDO CO STEA SNC RO26BTRL 02501202 121834XX 20 BTRL RO22 Inca sare OP canal electronic<br /> 
:61:1604110411D695,15NTRF047EPOP161020204<br /> 
:86:PLATA PP F 2479 PRAM CADE S SRL 7227 BTRL RO22 Plata OP intra canal electronic<br /> 
:61:1604110411C223,01NTRF010EIOP161020085<br /> 
:86: AP 1353368 F 12134396 121 40760 COM TURISM MARKET S RL Comturism Market SRL C OMTURISM MARKET SRL RO21B TRL01001202M68296XX 94 BT RLRO22 Incasare OP cana l electronic<br /> 
:62F:C160411RON1162675,04 <br /> 
:64:C160411RON1162675,04 <br /> 
-} 

我在Java代碼中是這樣的(工作,只是它不返回我想要的東西,這意味着startString減2線和endString之間的字符串):

import java.io.File; 
 
import java.io.FileNotFoundException; 
 
import java.util.Scanner; 
 

 
public class bt { 
 
\t public static void main(String[] args) { 
 
\t  // TODO code application logic here 
 
\t  File fileName = new File("bta.txt"); 
 
\t  
 
\t  try { 
 
\t   String startToken = ":25:RO68BTRL04701202281399XX"; 
 
\t   String endToken = "-}"; 
 
\t   boolean output = false; 
 
\t \t \t 
 
\t \t \t int nrLinie=0; 
 
\t 
 
\t   Scanner scan = new Scanner(fileName); 
 
\t   while (scan.hasNextLine()) { 
 
\t    String line = scan.nextLine(); 
 
\t    
 
\t    if (output==false && line.indexOf(startToken) > -1) { 
 
\t     output = true; 
 
\t     //line = line.substring(line.indexOf(startToken)+startToken.length()); 
 
\t     line = line.substring(line.indexOf(startToken)+1,line.indexOf(endToken)+endToken.length()); 
 
\t    } else if (output && line.indexOf(endToken) > -1) { 
 
\t     //output = false; 
 
\t     //System.out.println(line.substring(0, line.indexOf(endToken))); 
 
\t    } 
 
\t    
 
\t    if (output) { 
 
\t     System.out.println(line); 
 
\t    } 
 
\t   } 
 
\t  } catch (FileNotFoundException e) { 
 
\t   e.printStackTrace(); 
 
\t  } 
 
\t } 
 
}

謝謝你,因爲任何幫助是trully讚賞。

回答

0

這個正則表達式可以做到這一點。見regex101 for demo

((?:[^\r\n]*\r?\n){2}):25:RO68BTRL04701202281399XX(.*?)-\} 
相關問題