从文件中提取用管道分隔的信息并将其保存到另一个文件中

时间:2014-02-11 15:19:11

标签: java

考虑以下文件" 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中实现此目的的任何建议吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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

答案 2 :(得分: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