জাভাতে কোনও স্ট্রিং কীভাবে বিভক্ত করবেন


1639

আমার একটি স্ট্রিং রয়েছে, "004-034556"যে আমি দুটি স্ট্রিংয়ে বিভক্ত করতে চাই:

string1="004";
string2="034556";

তার মানে প্রথম স্ট্রিংটিতে অক্ষরগুলি আগে থাকবে '-'এবং দ্বিতীয় স্ট্রিংয়ের পরে অক্ষর থাকবে '-'। আমি এটিও দেখতে চাই যে স্ট্রিংটি এতে '-'আছে কিনা। যদি না হয়, আমি একটি ব্যতিক্রম নিক্ষেপ করব। কিভাবে আমি এটি করতে পারব?

উত্তর:


2929

শুধু উপযুক্ত পদ্ধতি ব্যবহার করুন: String#split()

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

মনে রাখবেন এটি নিয়মিত প্রকাশ করে , তাই প্রয়োজনে বিশেষ অক্ষরগুলি এড়িয়ে চলতে ভুলবেন না ।

সেখানে বিশেষ অর্থ 12 টি অক্ষর আছে: ব্যাকস্ল্যাশ \, ক্যারেট ^, ডলার চিহ্ন $, কাল বা বিন্দু ., উলম্ব বার বা পাইপ প্রতীক |, প্রশ্ন চিহ্ন ?, তারকাচিহ্ন বা তারকা *, প্লাস চিহ্ন +, খোলার প্রথম বন্ধনী (, সমাপনী প্রথম বন্ধনী ), এবং উদ্বোধনী বর্গাকার বন্ধনী [, খোলার কোঁকড়া ধনুর্বন্ধনী {, এই বিশেষ অক্ষরগুলিকে প্রায়শই "মেটাচার্যাক্টর" বলা হয়।

সুতরাং, আপনি যদি উদাহরণস্বরূপ / সময়কাল হিসাবে বিন্দুতে ."যে কোনও অক্ষর " অর্থ বিভক্ত করতে চান, তবে পৃথক বিশেষ চরিত্রের মতো পালাতে ব্যাকস্ল্যাশ\split("\\.") ব্যবহার করুন, অথবা অক্ষরের অক্ষরকে[] উপস্থাপন করতে অক্ষর শ্রেণিsplit("[.]") ব্যবহার করুন বা ব্যবহার Pattern#quote()করুন যেমন পুরো স্ট্রিং এড়িয়ে চলুন split(Pattern.quote("."))

String[] parts = string.split(Pattern.quote(".")); // Split on period.

আগে স্ট্রিংয়ে কিছু নির্দিষ্ট অক্ষর (গুলি) রয়েছে কিনা তা পরীক্ষা করার জন্য কেবল ব্যবহার করুন String#contains()

if (string.contains("-")) {
    // Split it.
} else {
    throw new IllegalArgumentException("String " + string + " does not contain -");
}

দ্রষ্টব্য, এটি একটি নিয়মিত ভাব প্রকাশ করে না। তার String#matches()বদলে ব্যবহার করুন

আপনি যদি ফলাফলগুলির অংশগুলিতে বিভক্ত অক্ষরটি ধরে রাখতে চান তবে ইতিবাচক দৃষ্টিকোণটি ব্যবহার করুন । আপনি যদি বাম হাতের অংশে বিভক্ত অক্ষরটি শেষ করতে চান ?<=তবে প্যাটার্নে গোষ্ঠীর উপসর্গ তৈরি করে ইতিবাচক চেহারাটি ব্যবহার করুন।

String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556

আপনি যদি ডান হাতের মধ্যে বিভাজনের অক্ষরটি শেষ করতে চান ?=তবে প্যাটার্নটিতে গোষ্ঠীর উপসর্গ তৈরি করে ইতিবাচক চেহারাটি ব্যবহার করুন।

String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556

আপনি যদি ফলাফলের অংশগুলির সংখ্যা সীমাবদ্ধ করতে চান, তবে আপনি split()পদ্ধতির দ্বিতীয় যুক্তি হিসাবে পছন্দসই সংখ্যা সরবরাহ করতে পারেন ।

String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42

27
আপনি স্ট্রিংয়ের পদ্ধতিগুলি সীমিত করতে কেন হ্যাশ প্রতীক ব্যবহার করেন?
ক্রোয়া

94
@ ক্রোয়ে: জাভাদোক-স্টাইল
বালুসসি

9
কর্নার কেস: এটি যদি এটি খুঁজে না পায় reugalr expressionতবে পুরো স্ট্রিং সহ একটি উপাদান অ্যারে ফেরত দেয়।
klimat

2
সর্বাধিক ভোট দেওয়া সংস্করণটি এমনটি বিশ্বাস করা যায় না। 1) পার্ট 2 মূল পোস্টটিতে দুটি "-" থাকলে পোস্টার কী চায় তা নয় 2) প্রশ্নে উল্লিখিত হিসাবে কোনও ত্রুটি পরিচালনা করতে কোনও ত্রুটি নেই। 3) কম দক্ষ। একটি একক অক্ষর অনুসন্ধানের জন্য নিয়মিত প্রকাশ এবং নির্মাণের প্রয়োজন matching অতিরিক্ত অ্যারে তৈরি করা হয়েছে, ইত্যাদি
ডেভিড

1
@ ডেভিড: 1) এটি প্রশ্নে আচ্ছাদিত নয়। 2) এটি ব্যতিক্রম ছুঁড়ে না। 3) ওপি কীভাবে বিভক্ত হবে জিজ্ঞাসা করে, কীভাবে সাবস্ট্রিং করবেন না। 4) একটু বিরতি নিন, গভীর শ্বাস নিন এবং আপনার মাথার সমস্ত নেতিবাচকতা ট্র্যাশ করুন :)
বালুস সি

79

স্ট্রিংটি সরাসরি প্রক্রিয়াকরণের বিকল্প হ'ল ক্যাপচারিং গ্রুপগুলির সাথে একটি নিয়মিত অভিব্যক্তি ব্যবহার করা। এর সুবিধা রয়েছে যে এটি ইনপুটটিতে আরও পরিশীলিত প্রতিবন্ধকতা বোঝাতে সোজা করে তোলে। উদাহরণস্বরূপ, নিম্নলিখিতটি স্ট্রিংটিকে দুটি ভাগে বিভক্ত করে এবং উভয়টিই কেবলমাত্র সংখ্যার সমন্বয়ে নিশ্চিত করে:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class SplitExample
{
    private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");

    public static void checkString(String s)
    {
        Matcher m = twopart.matcher(s);
        if (m.matches()) {
            System.out.println(s + " matches; first part is " + m.group(1) +
                               ", second part is " + m.group(2) + ".");
        } else {
            System.out.println(s + " does not match.");
        }
    }

    public static void main(String[] args) {
        checkString("123-4567");
        checkString("foo-bar");
        checkString("123-");
        checkString("-4567");
        checkString("123-4567-890");
    }
}

যেহেতু এই উদাহরণটিতে প্যাটার্নটি স্থির করা হয়েছে, এটি আগাম সংকলন করে একটি স্ট্যাটিক সদস্য হিসাবে সংরক্ষণ করা যেতে পারে (উদাহরণে ক্লাস লোড সময়ে সূচনা)। নিয়মিত প্রকাশটি হ'ল:

(\d+)-(\d+)

প্রথম বন্ধনী ক্যাপচারিং গ্রুপগুলি বোঝায়; regexp এর যে অংশটির সাথে মেলে সেই স্ট্রিংটি Match.group () পদ্ধতি দ্বারা অ্যাক্সেস করা যেতে পারে, যেমনটি দেখানো হয়েছে। \ D টি ম্যাচ এবং একক দশমিক অঙ্ক, এবং + এর অর্থ "পূর্বের এক্সপ্রেশনটির এক বা একাধিকটির সাথে মেলে) - - এর কোনও বিশেষ অর্থ নেই, সুতরাং ইনপুটটিতে কেবল সেই চরিত্রটির সাথে মেলে Note নোট করুন যে আপনাকে ব্যাকস্ল্যাশগুলিতে দ্বিগুণ পলায়ন করতে হবে এটি যখন জাভা স্ট্রিং হিসাবে লেখেন তখন কিছু অন্যান্য উদাহরণ:

([A-Z]+)-([A-Z]+)          // Each part consists of only capital letters 
([^-]+)-([^-]+)            // Each part consists of characters other than -
([A-Z]{2})-(\d+)           // The first part is exactly two capital letters,
                           // the second consists of digits

এটি একটি দুর্দান্ত সমাধান, তবে প্রথম অংশটি m.group(1)দ্বিতীয় অংশ হওয়া উচিত m.group(2), যেহেতু m.group(0)প্রকৃতপক্ষে পুরো মিলের প্যাটার্নটি দেয়। আমি মনে করি আমিও group(0)পুরো প্যাটার্নের পরিবর্তে প্রথম ম্যাচ হিসাবে ব্যবহৃত হতে মনে করেছি , সম্ভবত এটি সাম্প্রতিক জাভা সংস্করণ আপডেটে পরিবর্তিত হয়েছে।
ptstone

1
ধন্যবাদ। ডকস.ওরকল / জাভ্যাস / / / ডকস / এপি / জাভা / ইউটিল / রিজেক্স / এর দিকে তাকালে আপনি ঠিক বলেছেন - বেশিরভাগ অন্যান্য রেজিপ এক্স লাইব্রেরির সাথে সামঞ্জস্য রেখে , গ্রুপ 0 পুরো ম্যাচ, এবং বন্দী গোষ্ঠীগুলি শুরু হয় ১. আপনি যেমন বলেছিলেন, আমি সন্দেহ করি যে আমি উত্তরটি লেখার পরে এটি পরিবর্তিত হতে পারে তবে কোনও অবস্থাতেই আমি বর্তমানের আচরণ প্রতিফলিত করার জন্য এটি আপডেট করব।
রব হেগ

42
String[] result = yourString.split("-");
if (result.length != 2) 
     throw new IllegalArgumentException("String not in correct format");

এটি আপনার স্ট্রিংটিকে 2 ভাগে বিভক্ত করবে। অ্যারের মধ্যে প্রথম উপাদানের পূর্বে কাপড় ধারণকারী অংশ হবে -, এবং অ্যারের মধ্যে 2nd উপাদান পরে আপনার স্ট্রিংয়ের অংশকে উপস্থিত থাকবে -

অ্যারে দৈর্ঘ্য 2 না হয়, তাহলে স্ট্রিং ফর্ম্যাটে নেই ছিল: string-string

ক্লাসে split()পদ্ধতিটি পরীক্ষা করে দেখুন String

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-


5
এটি "-555" কে ইনপুট হিসাবে গ্রহণ করবে এবং [[555]] হিসাবে ফেরত পাবে। প্রয়োজনীয়তাগুলি পরিষ্কার হিসাবে সংজ্ঞায়িত করা হয় না, যদি এটি মানা বৈধ হবে। কাঙ্ক্ষিত আচরণটি সংজ্ঞায়িত করার জন্য আমি কয়েকটি ইউনিট-টেস্ট লেখার পরামর্শ দিচ্ছি।
মাইকেল কোনিয়েটজকা

পরিবর্তনের জন্য সম্ভবত সবচেয়ে নিরাপদ (ফলাফল. দৈর্ঘ্য! = 2) (ফলাফল. দৈর্ঘ্য <2)
চাচা ইরোহ

29
String[] out = string.split("-");

আপনি চান জিনিস করা উচিত। স্ট্রিং সহ অপারেটিং করার জন্য স্ট্রিং ক্লাসের অনেক পদ্ধতি রয়েছে।


29
// This leaves the regexes issue out of question
// But we must remember that each character in the Delimiter String is treated
// like a single delimiter        

public static String[] SplitUsingTokenizer(String subject, String delimiters) {
   StringTokenizer strTkn = new StringTokenizer(subject, delimiters);
   ArrayList<String> arrLis = new ArrayList<String>(subject.length());

   while(strTkn.hasMoreTokens())
      arrLis.add(strTkn.nextToken());

   return arrLis.toArray(new String[0]);
}

60
JavaDoc স্পষ্টভাবে বলে: " StringTokenizerএকটি লিগ্যাসি বর্গ যে সামঞ্জস্য কারণে বজায় রাখা হয়, যদিও হয় তার ব্যবহার নতুন কোডে নিরুৎসাহিত করা হয় এটি প্রস্তাবিত যে এই কার্যকারিতা সচেষ্ট যে কেউ ব্যবহার করেন। splitপদ্ধতি Stringবা java.util.regexপরিবর্তে প্যাকেজ।"
bvdb


18

প্রয়োজনীয়তা ব্যাখ্যার জন্য বাম জায়গা। আমি একটি পদ্ধতি লেখার পরামর্শ দিচ্ছি,

public final static String[] mySplit(final String s)

যা এই ফাংশন encapsulate। বাস্তবায়নের জন্য অন্যান্য উত্তরে বর্ণিত হিসাবে অবশ্যই আপনি স্ট্রিং.স্প্লিট (..) ব্যবহার করতে পারেন।

ইনপুট স্ট্রিং এবং কাঙ্ক্ষিত ফলাফল এবং আচরণের জন্য আপনার কিছু ইউনিট-পরীক্ষা লিখতে হবে।

ভাল পরীক্ষার্থীদের অন্তর্ভুক্ত করা উচিত:

 - "0022-3333"
 - "-"
 - "5555-"
 - "-333"
 - "3344-"
 - "--"
 - ""
 - "553535"
 - "333-333-33"
 - "222--222"
 - "222--"
 - "--4555"

পরীক্ষার ফলাফল অনুযায়ী ফলাফল নির্ধারণ করে, আপনি আচরণটি নির্দিষ্ট করতে পারেন।

উদাহরণস্বরূপ, যদি "-333"ফিরে আসা উচিত [,333]বা যদি এটি ত্রুটি হয়। এর "333-333-33"মধ্যে পৃথক করা যায় [333,333-33] or [333-333,33]বা এটি একটি ত্রুটি? ইত্যাদি।


4
দরকারী পরামর্শ, কিন্তু আসলে প্রশ্নের উত্তর নয়। আপনি যদি আরও উত্তরের সাথে বিশদ সমর্থন করে থাকেন তবে একটি মন্তব্য পছন্দ করা হবে।
ক্রিস মাউন্টফোর্ড

ব্যবহার করুন: রেফারেন্সের জন্য স্প্লিট (স্ট্রিং রেজেক্স, ইনট লিমিট) এবং নট স্প্লিট (স্ট্রিং রেজেক্স) geeforforgeeks.org/split-string-java- উদাহরণ
রায়ান অগাস্টাইন


16

ধরে নিচ্ছি যে

  • আপনার বিভাজনের জন্য আপনার সত্যিই নিয়মিত প্রকাশের প্রয়োজন নেই
  • আপনি ইতিমধ্যে আপনার অ্যাপ্লিকেশন এপাচি কমন্স ল্যাং ব্যবহার করতে পারেন

সবচেয়ে সহজ উপায় হ'ল স্ট্রিংগিলস # বিভাজন (জাভা.লাং.স্ট্রিং, চর) । আপনার যদি নিয়মিত মত প্রকাশের প্রয়োজন না হয় তবে জাভাটি বাক্সের বাইরে সরবরাহের চেয়ে আরও সুবিধাজনক। এর ম্যানুয়ালটিতে যেমন বলা হয়েছে, এটি এটির মতো কাজ করে:

A null input String returns null.

 StringUtils.split(null, *)         = null
 StringUtils.split("", *)           = []
 StringUtils.split("a.b.c", '.')    = ["a", "b", "c"]
 StringUtils.split("a..b.c", '.')   = ["a", "b", "c"]
 StringUtils.split("a:b:c", '.')    = ["a:b:c"]
 StringUtils.split("a b c", ' ')    = ["a", "b", "c"]

আমি কমং-ল্যাং ব্যবহার করার পরামর্শ দেব কারণ সাধারণত এটিতে প্রচুর পরিমাণে ব্যবহারযোগ্য। যাইহোক, যদি আপনার বিভাজন করা ব্যতীত অন্য কোনও কিছুর জন্য প্রয়োজন না হয়, তবে নিজেকে প্রয়োগ করা বা রেজেক্স থেকে বেরিয়ে আসা আরও ভাল বিকল্প option


15

Org.apache.commons.lang.StringUtils এর বিভাজন পদ্ধতি ব্যবহার করুন যা আপনি বিভক্ত করতে চান এমন অক্ষর বা স্ট্রিংয়ের উপর ভিত্তি করে স্ট্রিংগুলিকে বিভক্ত করতে পারে।

পদ্ধতির স্বাক্ষর:

public static String[] split(String str, char separatorChar);

আপনার ক্ষেত্রে, "-" থাকা অবস্থায় আপনি একটি স্ট্রিংকে বিভক্ত করতে চান।

আপনি কেবল নিম্নলিখিত হিসাবে সহজ করতে পারেন:

String str = "004-034556";

String split[] = StringUtils.split(str,"-");

আউটপুট:

004
034556

ধরে নিন যে -আপনার স্ট্রিংয়ে উপস্থিত না থাকলে এটি প্রদত্ত স্ট্রিংটি ফেরত দেয় এবং আপনি কোনও ব্যতিক্রম পাবেন না।


14

সংক্ষিপ্তসার হিসাবে: জাভাতে একটি স্ট্রিং বিভক্ত করার জন্য কমপক্ষে পাঁচটি উপায় রয়েছে:

  1. String.split ():

    String[] parts ="10,20".split(",");
  2. Pattern.compile (regexp) .splitAsStream (ইনপুট):

    List<String> strings = Pattern.compile("\\|")
          .splitAsStream("010|020202")
          .collect(Collectors.toList());
  3. স্ট্রিংটোকেনাইজার (উত্তরাধিকার শ্রেণি):

    StringTokenizer strings = new StringTokenizer("Welcome to EXPLAINJAVA.COM!", ".");
    while(strings.hasMoreTokens()){
        String substring = strings.nextToken();
        System.out.println(substring);
    }
  4. গুগল পেয়ারা বিভাজন:

    Iterable<String> result = Splitter.on(",").split("1,2,3,4");
  5. অ্যাপাচি কমন্স স্ট্রিং ইউটিলস:

    String[] strings = StringUtils.split("1,2,3,4", ",");

সুতরাং আপনি যা প্রয়োজন তার উপর নির্ভর করে আপনার জন্য সেরা বিকল্পটি চয়ন করতে পারেন, যেমন রিটার্নের ধরণ (অ্যারে, তালিকা বা পুনরাবৃত্ত)।

এখানে এই পদ্ধতির একটি বৃহত ওভারভিউ এবং সর্বাধিক সাধারণ উদাহরণ (কীভাবে বিন্দু, স্ল্যাশ, প্রশ্ন চিহ্ন ইত্যাদি দ্বারা বিভক্ত করা যায়)


13

সবচেয়ে দ্রুততম উপায়, যা সর্বনিম্ন সংস্থান গ্রহণ করে তা হ'ল:

String s = "abc-def";
int p = s.indexOf('-');
if (p >= 0) {
    String left = s.substring(0, p);
    String right = s.substring(p + 1);
} else {
  // s does not contain '-'
}

6
সর্বাধিক দুর্লভ সংস্থানটি প্রায়শই প্রোগ্রামারের সময় এবং মনোযোগ। এই কোডটি বিকল্পের চেয়ে সেই সংস্থানটি বেশি খরচ করে।
ক্রিস মাউন্টফোর্ড 22

আপনার প্রচুর অন্তর্নির্মিত সংস্থান রয়েছে যা আপনি ব্যবহার করতে পারেন, যেখানে এটি কার্যকরীভাবে বিবেচনা করা হয়, এই সমাধানটির কার্য সম্পাদনের
জে সানচেজ

1
ত্রুটি যাচাইয়ের সাথে একটি একক অক্ষরে সাধারণ বিভাজন করতে, এটি রেজেক্স সংস্করণটির চেয়ে জটিল নয়।
টেকহেড

বলিহারি! অবশেষে এই প্রশ্নের একটি উত্তর যা রেজেক্স ব্যবহার করে না! এই সাধারণ কাজের জন্য একটি রেজেক্স ব্যবহার করা বরং একটি হেডস্ক্র্যাচার। এই পৃথিবীতে এখনও বুদ্ধিমান প্রোগ্রামার রয়েছে তা দেখে ভাল
গ্যাব্রিয়েল মাগানা

কেবল একটি "-" আছে, একটি ব্যতিক্রম চাওয়া হয় এবং ফলাফলটি স্ট্রিং 1 এবং স্ট্রিং 2 এ যাওয়া উচিত। string1 = s.substring(0, s.indexOf("-")); string2 = s.substring(s.indexOf("-") + 1);এটি থেকে তৈরি করুন । StringIndexOutOfBoundsException"-" না থাকলে আপনি স্বয়ংক্রিয়ভাবে পাবেন ।
কাপলান

13

রিজেক্স ব্যবহার করে একাধিক অক্ষরের সাথে স্ট্রিং স্প্লিট

public class StringSplitTest {
     public static void main(String args[]) {
        String s = " ;String; String; String; String, String; String;;String;String; String; String; ;String;String;String;String";
        //String[] strs = s.split("[,\\s\\;]");
        String[] strs = s.split("[,\\;]");
        System.out.println("Substrings length:"+strs.length);
        for (int i=0; i < strs.length; i++) {
            System.out.println("Str["+i+"]:"+strs[i]);
        }
     }
  }

আউটপুট:

Substrings length:17
Str[0]:
Str[1]:String
Str[2]: String
Str[3]: String
Str[4]: String
Str[5]: String
Str[6]: String
Str[7]:
Str[8]:String
Str[9]:String
Str[10]: String
Str[11]: String
Str[12]:
Str[13]:String
Str[14]:String
Str[15]:String
Str[16]:String

তবে সমস্ত জেডিকে সংস্করণে একই আউটপুট আশা করবেন না। আমি একটি বাগ দেখেছি যা কিছু জেডিকে সংস্করণে বিদ্যমান যেখানে প্রথম নাল স্ট্রিং উপেক্ষা করা হয়েছে। এই বাগটি সর্বশেষ জেডিকে সংস্করণে উপস্থিত নেই, তবে এটি জেডিকে 1.7 দেরী সংস্করণ এবং 1.8 প্রারম্ভিক সংস্করণের মধ্যে কয়েকটি সংস্করণে বিদ্যমান।


13

সাধারণ ব্যবহারের ক্ষেত্রে String.split()কাজটি করা উচিত। আপনি যদি পেয়ারা ব্যবহার করেন তবে একটি স্প্লিটার শ্রেণিও রয়েছে যা বিভিন্ন স্ট্রিং ক্রিয়াকলাপকে শৃঙ্খলাবদ্ধ করতে সহায়তা করে এবং চারম্যাচারকে সমর্থন করে :

Splitter.on('-')
       .trimResults()
       .omitEmptyStrings()
       .split(string);

10
public class SplitTest {

    public static String[] split(String text, String delimiter) {
        java.util.List<String> parts = new java.util.ArrayList<String>();

        text += delimiter;

        for (int i = text.indexOf(delimiter), j=0; i != -1;) {
            String temp = text.substring(j,i);
            if(temp.trim().length() != 0) {
                parts.add(temp);
            }
            j = i + delimiter.length();
            i = text.indexOf(delimiter,j);
        }

        return parts.toArray(new String[0]);
    }


    public static void main(String[] args) {
        String str = "004-034556";
        String delimiter = "-";
        String result[] = split(str, delimiter);
        for(String s:result)
            System.out.println(s);
    }
}

9

আপনি নিম্নলিখিত স্টেটমেন্টটি ব্যবহার করে একটি স্ট্রিংকে লাইন ব্রেক দিয়ে বিভক্ত করতে পারেন:

String textStr[] = yourString.split("\\r?\\n");

আপনি নিম্নলিখিত বিবৃতিটি ব্যবহার করে একটি হাইফেন / অক্ষর দ্বারা একটি স্ট্রিং বিভক্ত করতে পারেন:

String textStr[] = yourString.split("-");

9
import java.io.*;

public class BreakString {

  public static void main(String args[]) {

    String string = "004-034556-1234-2341";
    String[] parts = string.split("-");

    for(int i=0;i<parts.length;i++) 
      System.out.println(parts[i]);
    }
  }
}

4
যদি আমি পরামর্শ ভাগ করে নিতে পারি তবে ইতিমধ্যে গৃহীত সমাধানের চেয়ে আপনার উত্তর কীভাবে আরও বেশি মূল্য নিয়ে আসে? stackoverflow.com/a/3481842/420096 এই পরিস্থিতিতে আপনি বিদ্যমান সমাধানের পক্ষে ভোট দিতে পারেন, বিশেষত যদি এটি এর মতো স্পষ্ট তুচ্ছ ঘটনা হয়।
সোমব্রিকস

8

আপনি স্প্লিট () ব্যবহার করতে পারেন:

import java.io.*;

public class Splitting
{

    public static void main(String args[])
    {
        String Str = new String("004-034556");
        String[] SplittoArray = Str.split("-");
        String string1 = SplittoArray[0];
        String string2 = SplittoArray[1];
    }
}

অন্যথায়, আপনি স্ট্রিংটোকেনাইজার ব্যবহার করতে পারেন:

import java.util.*;
public class Splitting
{
    public static void main(String[] args)
    {
        StringTokenizer Str = new StringTokenizer("004-034556");
        String string1 = Str.nextToken("-");
        String string2 = Str.nextToken("-");
    }
}

8

দুটি বিষয়ই সত্যই বিবেচনা করা উচিত।

এক-চরিত্রের ডিলিমিটারের জন্য স্ট্রিং.স্প্লিট ব্যবহার করুন বা আপনি পারফরম্যান্সের বিষয়ে চিন্তা করেন না

পারফরম্যান্স যদি কোনও সমস্যা না হয় বা ডিলিমিটারটি যদি একটি একক অক্ষর যা নিয়মিত প্রকাশের বিশেষ অক্ষর নয় (যেমন, এর একটি নয় .$|()[{^?*+\) তবে আপনি ব্যবহার করতে পারেন String.split

String[] results = input.split(",");

উপরোক্ত তালিকায় যদি ডিলিমেটারটি একক অক্ষর না হয় তবে নিয়মিত এক্সপ্রেশন ব্যবহার এড়াতে এই বিভাজন পদ্ধতির একটি অপ্টিমাইজেশন রয়েছে। অন্যথায়, এটি একটি নিয়মিত প্রকাশ করতে হবে এবং এটি আদর্শ নয়।

কোনও জটিল ডিলিমিটার ব্যবহার করে এবং আপনি পারফরম্যান্সের বিষয়ে যত্নশীল হন যদি প্যাটার্ন.স্প্লিট ব্যবহার করুন এবং প্যাটার্নটি প্রাকপম্পাইল করুন।

পারফরম্যান্স যদি কোনও সমস্যা হয় এবং আপনার ডিলিমিটার উপরেরগুলির মধ্যে একটি না হয়, আপনার একটি নিয়মিত প্রকাশের প্যাটার্ন প্রাক-সংকলন করা উচিত যা আপনি আবার ব্যবহার করতে পারবেন।

// Save this somewhere
Pattern pattern = Pattern.compile("[,;:]");

/// ... later
String[] results = pattern.split(input);

এই শেষ বিকল্পটি এখনও একটি নতুন Matcherঅবজেক্ট তৈরি করে । আপনি এই বস্তুকেও ক্যাশে রাখতে পারেন এবং সর্বাধিক পারফরম্যান্সের জন্য প্রতিটি ইনপুটটির জন্য এটি পুনরায় সেট করতে পারেন তবে এটি কিছুটা জটিল এবং থ্রেড-নিরাপদ নয়।


7

এটি করার একটি উপায় হ'ল স্ট্রিংয়ের জন্য প্রতিটি লুপের জন্য চালানো এবং প্রয়োজনীয় বিভক্ত অক্ষরটি ব্যবহার করা।

public class StringSplitTest {

    public static void main(String[] arg){
        String str = "004-034556";
        String split[] = str.split("-");
        System.out.println("The split parts of the String are");
        for(String s:split)
        System.out.println(s);
    }
}

আউটপুট:

The split parts of the String are:
004
034556

7

দয়া করে স্ট্রিংটোকেনাইজার শ্রেণি ব্যবহার করবেন না কারণ এটি একটি উত্তরাধিকার শ্রেণি যা সামঞ্জস্যতার কারণে ধরে রাখা হয় এবং এটির ব্যবহারটি নতুন কোডে নিরুৎসাহিত করা হয়। এবং আমরা বিভক্ত পদ্ধতিটি অন্যদের পরামর্শ অনুসারেও ব্যবহার করতে পারি।

String[] sampleTokens = "004-034556".split("-");
System.out.println(Arrays.toString(sampleTokens));

এবং প্রত্যাশিত হিসাবে এটি মুদ্রণ করা হবে:

[004, 034556]

এই উত্তরে আমি জাভা 8-তে পদ্ধতির জন্য সংঘটিত একটি পরিবর্তনওsplit নির্দেশ করতে চাই । স্ট্রিং # বিভক্ত () পদ্ধতি তোলে ব্যবহার Pattern.split, এবং এখন এটা বিন্যাসের ফলাফল শুরুতে খালি স্ট্রিং মুছে ফেলা হবে। জাভা 8 এর জন্য ডকুমেন্টেশনে এই পরিবর্তনটি লক্ষ্য করুন :

ইনপুট অনুক্রমের শুরুতে যখন ইতিবাচক-প্রস্থের ম্যাচ হয় তখন ফলাফল অ্যারের শুরুতে একটি খালি শীর্ষস্থানীয় স্ট্রস্ট্রিং অন্তর্ভুক্ত করা হয়। শুরুতে একটি শূন্য-প্রস্থের ম্যাচ তবে কখনও এ জাতীয় শূন্যস্থানীয় স্ট্রিং তৈরি করে না।

এটি নিম্নলিখিত উদাহরণের অর্থ:

String[] sampleTokensAgain = "004".split("");
System.out.println(Arrays.toString(sampleTokensAgain));

আমরা তিনটি স্ট্রিং পাব: [0, 0, 4]জাভা and এবং এর আগে যেমন ছিল তেমন চারটি নয়। অনুরূপ এই প্রশ্নটি পরীক্ষা করে দেখুন ।


7

এটি অর্জনের দুটি উপায় এখানে।

উপায় 1: আপনি একটি বিশেষ চরিত্র দ্বারা দুটি সংখ্যা বিভক্ত করতে হবে আপনি regex ব্যবহার করতে পারেন

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TrialClass
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("[0-9]+");
        Matcher m = p.matcher("004-034556");

        while(m.find())
        {
            System.out.println(m.group());
        }
    }
}

উপায় 2: স্ট্রিং বিভক্ত পদ্ধতি ব্যবহার করে

public class TrialClass
{
    public static void main(String[] args)
    {
        String temp = "004-034556";
        String [] arrString = temp.split("-");
        for(String splitString:arrString)
        {
            System.out.println(splitString);
        }
    }
}

6

কোনও স্ট্রিমটোকেনাইজার আপনি স্ট্রিং টোকেনাইজারকে কোনও স্ট্রিমকে দুটি বা তার বেশি অংশে বিভক্ত করতে ব্যবহার করতে পারেন যে কোনও প্রকার ডিলিমিটার রয়েছে কিনা:

StringTokenizer st = new StringTokenizer("004-034556", "-");
while(st.hasMoreTokens())
{
    System.out.println(st.nextToken());
}

4

পরীক্ষা করে দেখুন split()পদ্ধতি Stringjavadoc বর্গ।

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

String data = "004-034556-1212-232-232";
int cnt = 1;
for (String item : data.split("-")) {
        System.out.println("string "+cnt+" = "+item);
        cnt++;
}

এখানে বিভক্ত স্ট্রিংয়ের জন্য অনেক উদাহরণ তবে আমি সামান্য কোডটি অনুকূলিত করেছি।


প্রতিস্থাপন -সঙ্গে |এবং দেখুন সেখানে কি ঘটছে :)
আর সূর্যের


4
String str="004-034556"
String[] sTemp=str.split("-");// '-' is a delimiter

string1=004 // sTemp[0];
string2=034556//sTemp[1];

3

আমি কেবল জাভা অন্তর্নির্মিত ফাংশনগুলি ব্যবহার না করে একটি অ্যালগরিদম লিখতে চেয়েছিলাম:

public static List<String> split(String str, char c){
    List<String> list = new ArrayList<>();
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.length(); i++){
        if(str.charAt(i) != c){
            sb.append(str.charAt(i));
        }
        else{
            if(sb.length() > 0){
                list.add(sb.toString());
                sb = new StringBuilder();
            }
        }
    }

    if(sb.length() >0){
        list.add(sb.toString());
    }
    return list;
}

1

আপনি পদ্ধতিটি ব্যবহার করতে পারেন split:

public class Demo {
    public static void main(String args[]) {
        String str = "004-034556";

        if ((str.contains("-"))) {
            String[] temp = str.split("-");
            for (String part:temp) {
                System.out.println(part);
            }
        }
        else {
            System.out.println(str + " does not contain \"-\".");
        }
    }
}

1

স্ট্রিংকে বিভক্ত করতে স্ট্রিং.স্প্লিট (রেজেেক্স) ব্যবহার করুন। নিম্নলিখিত উদাহরণগুলি পর্যালোচনা করুন:

String data = "004-034556";
String[] output = data.split("-");
System.out.println(output[0]);
System.out.println(output[1]);

আউটপুট

004
034556

বিঃদ্রঃ:

এই বিভাজন (রেজেক্স) একটি আর্গুমেন্ট হিসাবে একটি রেজেক্স নেয়। পিরিয়ড / ডটের মতো রেগেক্স বিশেষ অক্ষরগুলি থেকে বাঁচতে ভুলবেন না।


0
String s="004-034556";
for(int i=0;i<s.length();i++)
{
    if(s.charAt(i)=='-')
    {
        System.out.println(s.substring(0,i));
        System.out.println(s.substring(i+1));
    }
}

সবার দ্বারা উল্লিখিত হিসাবে, বিভাজন () সেরা বিকল্প যা আপনার ক্ষেত্রে ব্যবহার করা যেতে পারে। একটি বিকল্প পদ্ধতি সাবস্ট্রিং () ব্যবহার করা যেতে পারে।


0

একটি স্ট্রিং বিভক্ত করতে, ব্যবহার করুন String.split(regex):

String phone = "004-034556";
String[] output = phone.split("-");
System.out.println(output[0]);
System.out.println(output[1]);

আউটপুট:

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