একাধিক ডিলিমিটারগুলির সাথে স্ট্রিং.স্প্লিট () ব্যবহার করুন


201

আমাকে ডিলিমিটার -এবং এর উপর একটি স্ট্রিং বেস বিভক্ত করতে হবে .। নীচে আমার কাঙ্ক্ষিত আউটপুট রয়েছে।

AA.BB-CC-DD.zip ->

AA
BB
CC
DD
zip 

তবে আমার নিম্নলিখিত কোডটি কাজ করে না।

private void getId(String pdfName){
    String[]tokens = pdfName.split("-\\.");
}

আপনি যা বলেছেন তার ভিত্তিতে, দেখে মনে হচ্ছে এটি ঠিকঠাক কাজ করছে। আপনার কাঙ্ক্ষিত ফলাফল কি?
জেফ

2
@ জেফ: তিনি তার পছন্দসই আউটপুট দেখিয়েছেন ( AA/ BB/ CC...)
টিজে ক্রোডার

2
তুমি কি নিশ্চিত? আমি ব্যাখ্যা করেছি যে এটি তার বর্তমান আউটপুট হিসাবে, তার পছন্দসই আউটপুট হিসাবে নয়। উঠে পড়ার সময় হয়তো খানিকটা হাঁটতে হবে।
জেফ

@ জেফ: বিভ্রান্তির জন্য দুঃখিত, আপনার ভুল বোঝাবুঝি পরিষ্কার করতে আমি আমার পোস্ট আপডেট করেছি।
থ্যাং ফাম

রেজেক্স আপনার কর্মক্ষমতা হ্রাস করবে। আমি এমন একটি পদ্ধতি লেখার পরামর্শ দেব যা প্রয়োজনে অক্ষর এবং বিভক্ত স্ট্রিং অনুসারে অক্ষরে যাবে। লগ (এন) এর পারফরম্যান্স পেতে আপনি এই ভবিষ্যতটিকে অনুকূল করতে পারেন।
প্রিন্সেশ

উত্তর:


311

আমি মনে করি আপনাকে রেজেক্স বা অপারেটর অন্তর্ভুক্ত করতে হবে :

String[]tokens = pdfName.split("-|\\.");

আপনার যা মিলবে তা মিলবে:
[DASH এর পরে DOT একসাথে] [DASH বা DOT এর মধ্যে কোনওটি -.
নয়
] -বা.


9
আমাদের দুটি ব্যাকস্ল্যাশ দরকার কেন ??
pjain

7
.Regex চরিত্রের নতুন লাইন ছাড়া অন্য কোনো চরিত্র মানে। tutorialspPoint.com/java/java_regular_expressions.htm এই ক্ষেত্রে, তারা প্রকৃত চরিত্রটি চেয়েছিল .। দুটি ব্যাকস্ল্যাশ ইঙ্গিত করে যে আপনি উল্লেখ করছেন .। ব্যাকস্ল্যাশ একটি পালানোর চরিত্র।
মনকিগ্রিন্ডার

2
সাধারণ ক্ষেত্রে এটি হবে .split("match1|match2")(উদাহরণস্বরূপ split("https|http")), .above উপরের ক্ষেত্রে বিশেষ
চরটি

বা সাধারণত, আপনি pdfName.split("\\W");নীচের হিসাবে পিটার নেগো উত্তর ব্যবহার করতে পারেন
আহমাদেবিলিবিবি

1
[-.]পরিবর্তে ব্যবহার করুন-|\\.
Saeed

49

এই রেজেক্স চেষ্টা করুন "[-.]+"। + পরে একের পর এক ডিলিমিটার অক্ষর আচরণ করে। আপনি যদি এটি না চান তবে প্লাস সরান।


8
@ লুকারস: পিটারের পালাতে না পারার একমাত্র কারণ হ'ল এটিই -ছিল প্রথম দিকের ভিতরে ভাবনা [], অন্যথায় এর সামনে একটি ব্যাকস্ল্যাশ হওয়া দরকার (এবং অবশ্যই এটির সামনে একটি ব্যাকস্ল্যাশ রাখার জন্য, আমরা দুটি দরকার কারণ এটি একটি স্ট্রিং আক্ষরিক)।
টিজে ক্রাউডার

আমি মনে করি এই উত্তরটি গৃহীত উত্তরটির চেয়ে ভাল, কারণ আপনি যখন লজিকাল অপারেটর ব্যবহার করেন | সমস্যাটি হ'ল আপনার ডেলিমিটারগুলির মধ্যে একটি আপনার ফলাফল 'টোকেন' এর অংশ হতে পারে। পিটার নেঙ্গোর [-।] +
জ্যাক '

26

আপনি "রেজেক্স" use ডাব্লু "ব্যবহার করতে পারেন। এটি কোনও শব্দহীন অক্ষরের সাথে মেলে required প্রয়োজনীয় লাইনটি হ'ল:

String[] tokens=pdfName.split("\\W");

এটি আমার জন্য কাজ করে না ring স্ট্রিং s = "আইডি (INT), নাম (STRING),"। এখানে W Using ব্যবহার করে দৈর্ঘ্যের একটি অ্যারে তৈরি হয় যেখানে এটি কেবল 4
ইউজার 3527975

2
ইনপুটটিতে ইউনিকোড অক্ষর থাকলে এটিও ভেঙে যাবে। একটি "সমস্ত দখল" এর পরিবর্তে কেবল প্রকৃত সীমানাঙ্ককে অন্তর্ভুক্ত করা ভাল \W
nhahtdh

13

স্ট্রিং আপনাকে দিতে splitএকটি রেগুলার এক্সপ্রেশন এর স্ট্রিং ফর্ম, তাই:

private void getId(String pdfName){
    String[]tokens = pdfName.split("[\\-.]");
}

এর অর্থ যে কোনও চরিত্রের বিভক্ত হওয়া [](আমাদের -একটি ব্যাকস্ল্যাশ নিয়ে পালাতে হবে কারণ এটি বিশেষ ভিতরে []; এবং অবশ্যই আমাদের ব্যাকস্ল্যাশ থেকে বাঁচতে হবে কারণ এটি একটি স্ট্রিং)। (বিপরীতে, .সাধারণত বিশেষ তবে এটি ভিতরে বিশেষ নয়[] ))


এই ক্ষেত্রে আপনাকে হাইফেন থেকে বাঁচার দরকার নেই, কারণ [-.]সম্ভবত ব্যাপ্তি হিসাবে ব্যাখ্যা করা যায়নি।
অ্যালান মুর

1
@ অ্যালান: কারণ এটি ক্লাসে প্রথম জিনিস, এটি বেশ সত্য। তবে আমি সবসময়ই করি, পরে ফিরে আসা এবং চিন্তা না করে এর সামনে কিছু যুক্ত করা খুব সহজ। এড়িয়ে যাওয়ার জন্য কোনও খরচ হয় না, তাই ...
টিজে ক্রাউডার

আপনি কি বন্ধনী থেকে বাঁচতে জানেন? আমার স্ট্রিং রয়েছে "[200] ইঞ্জিনিয়ারিং" যা আমি "200", "ইঞ্জিনিয়ারিং"
স্কটিসিয়াস

3
ওহ বাহ আমি পেয়েছি ... আমাকে একজনের পরিবর্তে দুটি ব্যাকস্ল্যাশ ব্যবহার করতে হয়েছিল। String[] strings = codes.get(x).split("\\[|\\]| ");<- আগ্রহী প্রত্যেকের জন্য কোড
স্কটিসিয়াস


4

দুটি চর চরিত্রের জন্য ডিলিমেটার হিসাবে "" এবং "বা" বা এটি করা উচিত। ব্যবহার করার সময় ট্রিম করতে ভুলবেন না।

 String text ="ISTANBUL AND NEW YORK AND PARIS OR TOKYO AND MOSCOW";
 String[] cities = text.split("AND|OR"); 

ফলাফল: শহরগুলি = {"ইস্তানবুল", "নিউ ইয়র্ক", "প্যারিস", "টোকিও", "মস্কো"}


আমি কীভাবে I "ইস্তানবুল অ্যান্ড", "নিউ ইয়র্ক এবং", "প্যারিস বা", "টোকিও এবং", "মস্কো"}
আহমাদুল্লাহ সৈকত

3

আমি অ্যাপাচি কমন্স ব্যবহার করব:

আমদানি org.apache.commons.lang3.StringUtils;

private void getId(String pdfName){
    String[] tokens = StringUtils.split(pdfName, "-.");
}

এটি পৃথককারী হিসাবে StringUtils.splitByWholeSeparator(str, separator)সম্পূর্ণ স্ট্রিং ব্যবহার করে এর বিপরীতে, নির্দিষ্ট বিভাজকের যে কোনওটিতে বিভক্ত হবে


3
String[] token=s.split("[.-]");

9
আপনার কোড-কেবলমাত্র উত্তরটি কিছু ব্যাখ্যা দিয়ে বাড়িয়ে স্ট্যাকওভারফ্লো একটি নিখরচায় কোড-লেখার পরিষেবা is
ইউনোশচ

2

এই জাতীয় কিছু ব্যবহার করা ভাল:

s.split("[\\s\\-\\.\\'\\?\\,\\_\\@]+");

নমুনা হিসাবে আরও কয়েকটি অক্ষর যুক্ত করেছেন। এটি ব্যবহারের সবচেয়ে নিরাপদ উপায়, কারণ উপায় .এবং 'চিকিত্সা করা হয়।


1

আপনি বিভাজন () পদ্ধতিতে নিয়মিত অভিব্যক্তি যুক্তি হিসাবেও নির্দিষ্ট করতে পারেন .. নীচের উদাহরণটি দেখুন ...

private void getId(String pdfName){
String[]tokens = pdfName.split("-|\\.");
}

1

এই কোড ব্যবহার করে দেখুন:

var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/);

1
আপনার কোড-কেবলমাত্র উত্তরটি কিছু ব্যাখ্যা দিয়ে বাড়িয়ে স্ট্যাকওভারফ্লো একটি নিখরচায় কোড-লেখার পরিষেবা is
ইউনোশচ

0
s.trim().split("[\\W]+") 

কাজ করা উচিত.


2
প্রথম, না, এটি কাজ করে না - পোস্ট করার আগে আপনি এটি ব্যবহার করে দেখতে পারেন? তাহলে এই উত্তরটি আপনার - তবে কাজ করার মতো। অবশেষে আপনার গঠন গঠন পরীক্ষা করা উচিত ( কাজ করা উচিত ))
উত্সাহিত

1
আপনার কোড-কেবলমাত্র উত্তরটি কিছু ব্যাখ্যা দিয়ে বাড়িয়ে স্ট্যাকওভারফ্লো একটি নিখরচায় কোড-লেখার পরিষেবা is
ইউনোশচ

-1

আপনি যদি জানেন যে স্টিং সর্বদা একই বিন্যাসে থাকবে, প্রথমে স্ট্রিংটির উপর ভিত্তি করে বিভক্ত করুন .এবং প্রথম সূচীতে স্ট্রিংটি একটি ভেরিয়েবলের মধ্যে সঞ্চয় করুন। তারপর উপর ভিত্তি করে দ্বিতীয় সূচক স্ট্রিং বিভক্ত -এবং দোকান ইনডেক্স 0, 1 এবং 2. অবশেষে, পূর্ববর্তী অ্যারের বিভক্ত সূচক 2 এর উপর ভিত্তি করে .এবং আপনি প্রাসঙ্গিক ক্ষেত্র সব প্রাপ্ত করা উচিত ছিল।

নিম্নলিখিত স্নিপেট দেখুন:

String[] tmp = pdfName.split(".");
String val1 = tmp[0];
tmp = tmp[1].split("-");
String val2 = tmp[0];
...

6
এটি এক ধাপে করা যায়, তাই এটি এক ধাপে করুন। অন্যান্য উত্তর দেখুন।
কাজ

2
pdfName.split(".")একটি শূন্য দৈর্ঘ্যের অ্যারে ফলাফল।
অ্যালান মুর

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