2014-02-11 25 views
0

考虑下列文件“sample.txt的”作为输入包含以下信息的java程序:提取与文件管分离信息,并将其保存到另一个文件

#1|77|1391436891|1|1|00:1e:58:f4:15:f7|Nexus 4, 4.4, MAKOZ30d 
$1|1391436893 
?[176.08179, -13.839829, -1.0054213] 
%PKKV7|00:7f:28:3f:17:9d|-67|2437 
%DC2VJ|f8:e4:fb:a0:06:f8|-71|2412 
%VVWSP|00:7f:28:d5:92:65|-71|2462 
%SVT8H|f8:e4:fb:8e:d6:9b|-77|2437 
%ThreeBestFriends|20:10:7a:14:6a:f7|-66|2452 
%2X4C8|00:7f:28:44:23:da|-75|2437 
%STDGD|f8:e4:fb:70:86:f4|-82|2462 
%DeathStar|00:7f:28:be:c8:94|-84|2412 
%Freeinternet|00:1e:58:f4:15:f7|-59|2437 
%QB657|00:26:62:b7:16:4b|-88|2462 
%375F2|00:26:b8:3e:0a:14|-70|2412 
%E1K38|00:26:62:cf:90:37|-81|2412 

我试图让一个“output.txt”文件如下:

00:7f:28:3f:17:9d|-67 
f8:e4:fb:a0:06:f8|-71 
00:7f:28:d5:92:65|-71 
f8:e4:fb:8e:d6:9b|-77 
20:10:7a:14:6a:f7|-66 
00:7f:28:44:23:da|-75 
f8:e4:fb:70:86:f4|-82 
00:7f:28:be:c8:94|-84 
00:1e:58:f4:15:f7|-59 
00:26:62:b7:16:4b|-88 
00:26:b8:3e:0a:14|-70 
00:26:62:cf:90:37|-81 

如何在java中实现这个任何建议?

回答

0

下面的正则表达式将提取此:

\w{2}:\w{2}:\w{2}:\w{2}:\w{2}:\w{2}\W{1}-\d{2} 

http://ideone.com/FwpV7z

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import java.util.regex.*; 


class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     String testData = "#1|77|1391436891|1|1|00:1e:58:f4:15:f7|Nexus 4, 4.4, MAKOZ30d $1|1391436893 ?[176.08179, -13.839829, -1.0054213] %PKKV7|00:7f:28:3f:17:9d|-67|2437 %DC2VJ|f8:e4:fb:a0:06:f8|-71|2412 %VVWSP|00:7f:28:d5:92:65|-71|2462 %SVT8H|f8:e4:fb:8e:d6:9b|-77|2437 %ThreeBestFriends|20:10:7a:14:6a:f7|-66|2452 %2X4C8|00:7f:28:44:23:da|-75|2437 %STDGD|f8:e4:fb:70:86:f4|-82|2462 %DeathStar|00:7f:28:be:c8:94|-84|2412 %Freeinternet|00:1e:58:f4:15:f7|-59|2437 %QB657|00:26:62:b7:16:4b|-88|2462 %375F2|00:26:b8:3e:0a:14|-70|2412 %E1K38|00:26:62:cf:90:37|-81|2412"; 
     String regularExpression = "\\w{2}:\\w{2}:\\w{2}:\\w{2}:\\w{2}:\\w{2}\\W{1}-\\d{2}"; 

     Pattern pattern = Pattern.compile(regularExpression); 
     Matcher matcher = pattern.matcher(testData); 
     while(matcher.find()) { 
      System.out.println(matcher.group(0)); 
     } 

    } 
} 

输出:

00:7f:28:3f:17:9d|-67 
f8:e4:fb:a0:06:f8|-71 
00:7f:28:d5:92:65|-71 
f8:e4:fb:8e:d6:9b|-77 
20:10:7a:14:6a:f7|-66 
00:7f:28:44:23:da|-75 
f8:e4:fb:70:86:f4|-82 
+0

谢谢你的工作。有没有办法输入和输出文件? – user3294395

+0

http://www.cstutoringcenter.com/tutorials/java/java11.php –

0

如果您将该行读取为字符串,则可以使用split将其拆分为管道。

+0

我必须使用哪个函数来分离管道? – user3294395

+1

yourstring.split(“|”) – Popo

0

这里有一个很好的开始(可能是拼写错误的,因为我没直写在这里)

//Read all lines, one line at a time with a simple scanner: 
Scanner sc = new Scanner(new File("sample.txt")); 
while (sc.hasNextLine()){ 
    String line = sc.nextLine(); 
    //If the line starts with a % do something, else ignore 
    if (line.charAt(0) == '%'){ 
     int firstPipe = line.indexOf("|"); 
     int secondPipe = line.indexOf("|",firstPipe); 

     //Now use String.substring() and perhaps a temporary StringBuffer storage followed by, for example, a FileWriter to create the output file 
相关问题