मैं (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
jonny 20 अक्टूबर 2018, 02:17

1 उत्तर

सबसे बढ़िया उत्तर

आपकी मुख्य समस्या वह सीमांकक स्ट्रिंग है जिसे आप Scanner.useDelimiter(). वह विधि एक नियमित अभिव्यक्ति की अपेक्षा कर रही है और पाइप (|) वर्ण इस संदर्भ में एक आरक्षित है, जिसका अर्थ है कि आपको इससे बचने की आवश्यकता है, अर्थात इस तरह की विधि को कॉल करें :

sc.useDelimiter("\\|");

हालांकि, पाठ की पंक्ति से आईडी को पार्स करने के लिए आपको किसी अन्य Scanner का उपयोग करने की आवश्यकता नहीं है। 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;
        }
    }
}
1
Mick Mnemonic 20 अक्टूबर 2018, 00:01