স্ট্রিং.স্প্লিটকে পালানোর জন্য পাইপ ডিলিমিটারের প্রয়োজন কেন?


140

আমি এমন একটি ফাইল পার্স করার চেষ্টা করছি যাতে পাইপের সীমানাঙ্কিত মানগুলির সাথে প্রতিটি লাইন থাকে। আমি বিভক্ত পদ্ধতিতে পাইপ ডিলিমেটারটি এড়াতে না পারলে এটি সঠিকভাবে কাজ করে না, তবে নীচের মতো পাইপটি পালানোর পরে এটি সঠিকভাবে কাজ করেছিল।

private ArrayList<String> parseLine(String line) {
    ArrayList<String> list = new ArrayList<String>();
    String[] list_str = line.split("\\|"); // note the escape "\\" here
    System.out.println(list_str.length);
    System.out.println(line);
    for(String s:list_str) {
        list.add(s);
        System.out.print(s+ "|");
    }
    return list;
}

কেউ দয়া করে ব্যাখ্যা করতে পারেন কেন সেই split()পদ্ধতির জন্য পাইপের চরিত্রটি এড়িয়ে যাওয়ার প্রয়োজন ?


13
নীচের উত্তরগুলি "কেন," জবাব দিয়েছে তবে কেবল এফওয়াইআই, যদি আপনি একটি আক্ষরিক স্ট্রিংয়ের সাথে মেলে চেষ্টা করছেন তবে আপনি প্যাটার্ন.কোোটের দিকেও নজর দিতে পারেন । এটি গ্রহণ করে Stringএবং একটি রেজেক্স দেয় Stringযা ইনপুটটির সাথে মেলে (যেমন এটি আপনার জন্য সমস্ত পালানোর যত্ন নেয়)।
ysavit

+1 এর জন্যPattern.quote
রেডড্যাভিল

উত্তর:


175

String.splitনিয়মিত অভিব্যক্তি যুক্তি প্রত্যাশা করে। একটি অনস্ক্র্যাপডকে একটি রেইজেক্স |হিসাবে পার্স করা হয়েছে যার অর্থ "খালি স্ট্রিং বা খালি স্ট্রিং", যা আপনি বোঝাতে চাইছেন তা নয়।


76

কারণ সেই পরামিতিটির বিভাজনের জন্য বাক্য গঠনটি একটি নিয়মিত প্রকাশ, যেখানে '|' OR এর একটি বিশেষ অর্থ রয়েছে এবং একটি '\ |' আক্ষরিক অর্থ '|' সুতরাং স্ট্রিং "\\ |" নিয়মিত অভিব্যক্তি '\ |' যার অর্থ হ'ল চরিত্রের সাথে মিল |


1
এই ব্যাখ্যার জন্য ধন্যবাদ। আমি প্রায় সবসময় ডাবল পলায়ন ব্যবহার করতে ভুলবেন না। এখন কেন আমি জানি যে এটি কেন, এটি অবশ্যই এখন থেকে আমাকে মনে রাখতে সহায়তা করবে।
সুফিনওয়াজ

স্ট্রিং লাইনের মানটিতে কিছু পাইপ অক্ষর থাকলে কী হবে? আপনি কীভাবে পালানো পাইপ বিভাজন না করে বিভক্ত করতে সক্ষম হবেন \ | ?
আলেকজান্দ্রেজে

@ আলেকজান্দ্রেজে আপনি কি এমন লাইনটি বিভক্ত করবেন যাতে জিজ্ঞাসা করছেন: এর Some|Delimited|Text|With|An\|Embedded|Pipe|Charমধ্যে ("Some", "Delimited", "Text", "With", "An\|Embedded", "Pipe", "Char")? বিভক্ত ফাংশনটি এ জাতীয়ভাবে পালানোর পক্ষে সমর্থন করে না তবে আপনি একটি নিয়মিত ভাব প্রকাশ করতে সক্ষম হবেন যা এই ক্ষেত্রে কাজ করবে যেমন শূন্য-প্রস্থের নেতিবাচক (?<!\\)\|line.split("(?<!\\\\)\\|");
দৃ group়তার সাথে

6

আপনি কেবল এটি করতে পারেন:

String[] arrayString = yourString.split("\\|");

আপনি "আপনার স্ট্রিং.স্প্লিট (" \\ | ")" রেগেক্স ব্যবহার করার জন্য আপনাকে escape এড়াতে হবে এটি সঠিক সূত্র।
mautrok
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.