代码之家  ›  专栏  ›  技术社区  ›  jonny

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

  •  1
  • jonny  · 技术社区  · 6 年前

    下面是我尝试的代码-

    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 回复  |  直到 6 年前
        1
  •  1
  •   Mick Mnemonic    6 年前

    您的主要问题是要传递给的分隔符字符串 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;
            }
        }
    }