如何从管道分隔文件中提取动态填充的字母数字词

时间:2018-10-19 23:17:22

标签: java

我正在尝试打印(Sys.out)字母数字单词,该单词是动态填充在管道分隔文件中的。到目前为止,我已经能够读取文件并逐字逐字地遍历每个字,但是我想整体打印此字,而不是一行一行地逐字打印。

下面是我尝试的代码-

public void extract_id() {

    File file= new File("src/test/resources/file.txt");
    Scanner sc=null;
    String str=null;
    try {
        sc=new Scanner(file);

        while(sc.hasNextLine()){
            str=sc.nextLine();
            parseID(str);

        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    sc.close();
}

private void parseId(String str) {
    String printId;
    Scanner sc=new Scanner(str);
    sc.useDelimiter("|");

    while(sc.hasNext()){
        if(sc.next().contains("ID")){
            printId=sc.next();
            System.out.println("Id is "+printId);
        }       
    }
    sc.close();
}

我的目标是打印-AF12345

以示例分隔的管道文件

id|1|session|26|zipCode|73112
id|2|session|27|recType|dummy
id|3|session|28|ID|AF12345|

1 个答案:

答案 0 :(得分:1)

您的主要问题是您要传递给Scanner.useDelimiter()的定界符字符串。该方法需要一个正则表达式,并且管道(|)字符在这种情况下恰好是保留的,这意味着您需要对其进行转义,即调用这样的方法:

sc.useDelimiter("\\|");

但是,您不需要使用其他Scanner来从文本行中解析ID。 String.split()就足够了:

private void parseId(String str) {
    String[] tokens = str.split("\\|");

    for (int i = 0; i < tokens.length; i++) {
        if (tokens[i].equals("ID")) {
            String idValue = tokens[i + 1]; // this will throw an error if
                                            // there is nothing after ID on
                                            // the row
            System.out.println("Id is " + idValue);
            break;
        }
    }
}