জাভাতে একটি অক্ষর সি পর্যন্ত স্ট্রিং থেকে স্ট্রাস্টিং কিভাবে পাবেন?


106

আমার একটি স্ট্রিং রয়েছে (যা মূলত নামকরণের সম্মেলনের পরে একটি ফাইলের নাম) abc.def.ghi

আমি প্রথমটির .(যেমন একটি বিন্দু) আগে সাবস্ট্রিংটি বের করতে চাই

জাভা ডক এপি-তে, আমি স্ট্রিংয়ে এমন কোনও পদ্ধতি খুঁজে পাচ্ছি না যা এটি করে।
আমি কিছু অনুপস্থিত করছি? এটা কিভাবে করতে হবে?

উত্তর:


66

তাকান String.indexOfএবং String.substring

আপনি -1 এর জন্য পরীক্ষা করেছেন তা নিশ্চিত করুন indexOf


4
স্বল্প ও মধুর. এছাড়াও মনে রাখবেন যে সূচিপত্র সূচকের প্রথম সূচক দেয়।
নীল চৌধুরী

যেমন @ সাম বি বলেছেন, আপনি এটি কীভাবে ব্যবহার করবেন তা ব্যাখ্যা করেননি।
ইন্টেলিডিটা

117

গৃহীত উত্তরটি সঠিক তবে এটি কীভাবে ব্যবহার করবেন তা আপনাকে জানায় না। এভাবে আপনি একসাথে সূচিপত্র এবং স্ট্রিং ফাংশন ব্যবহার করেন।

String filename = "abc.def.ghi";     // full file name
int iend = filename.indexOf("."); //this finds the first occurrence of "." 
//in string thus giving you the index of where it is in the string

// Now iend can be -1, if lets say the string had no "." at all in it i.e. no "." is found. 
//So check and account for it.

String subString;
if (iend != -1) 
{
    subString= filename.substring(0 , iend); //this will give abc
}

4
এটি অবৈধ কোড কারণ আপনি বন্ধনীগুলি ছাড়াই যদি একটি বিবৃতিতে শরীরে পরিবর্তনশীল ঘোষণা রাখতে পারবেন না।
Clashsoft

@ ক্ল্যাশফট বন্ধনী এখানে অন্তর্ভুক্ত করা হয়েছে।
আলিয়ু

90

আপনি কেবল স্ট্রিং বিভক্ত করতে পারেন ..

public String[] split(String regex)

নোট করুন যে java.lang.String.split ডিলিমিটারের নিয়মিত এক্সপ্রেশন মান ব্যবহার করে। মূলত এর মতো ...

String filename = "abc.def.ghi";     // full file name
String[] parts = filename.split("\\."); // String array, each element is text between dots

String beforeFirstDot = parts[0];    // Text before the first dot

অবশ্যই, স্বচ্ছতার জন্য এটি একাধিক লাইনে বিভক্ত। এটি হিসাবে লেখা যেতে পারে

String beforeFirstDot = filename.split("\\.")[0];

5
আপনার প্রস্তাবনাটি সঠিক নয়, কারণ জাভা.এল.আর. স্ট্রিং.স্প্লিট কেবল স্ট্রিংকেই নয়, গুণ হিসাবে গ্রহণ করে ge সমস্ত "।" আপনার উদাহরণে "\\" এ পরিবর্তন করা দরকার \\ তারপরে এটি কাজ করবে :)
এরিক কাজু

4
আমি রেগেক্সকে ভালবাসি, তবে এটি প্রতিবার আমাকে পেয়ে যায়।
চাদ শোগগিনস

75

যদি আপনার প্রকল্পটি ইতিমধ্যে কমন্স-ল্যাং ব্যবহার করে , স্ট্রিং ইউটিসগুলি এই উদ্দেশ্যে একটি দুর্দান্ত পদ্ধতি সরবরাহ করে:

String filename = "abc.def.ghi";

String start = StringUtils.substringBefore(filename, "."); // returns "abc"

জাভাডোক দেখুন [২.6] [৩.১]


অন্যান্য সমাধানের তুলনায় পরিষ্কার।
ইউজেরাব

12

অথবা আপনি কিছু চেষ্টা করতে পারেন

"abc.def.ghi".substring(0,"abc.def.ghi".indexOf(c)-1);


4
'সি' এর ক্র্যাশটি স্ট্রিংয়ে নেই কারণ
সূচি

@ উমর হায়াত যদি ফাইলের নাম হয় def.hij.klm? আপনার কোডটি কীভাবে কাজ করবে? (আপনার কোডটি কেবলমাত্র এই উদাহরণের জন্য কাজ করে - আপনি ফাংশনটি লিখতে পারেন যা ফিরে আসে "abc"- এটি ঠিক তেমন কাজ করবে)
বোহেমিয়ান

@ বোহেমিয়ান: আমি জানি যে সীমানা মামলা এবং চেকগুলি অনুপস্থিত রয়েছে। নির্দিষ্ট উদাহরণ এবং ধারণার একটি নির্দিষ্ট উত্তর ছিল এটি একটি উদাহরণের মাধ্যমে সাধারণ ধারণা দেওয়া :)।
উমর হায়াত

4
@ তোফুবিয়ার: ঠিক আছে, আগে একটি বিভ্রান্তি আছে "(অর্থাত্ একটি বিন্দু)" প্রকৃত পোস্টে ছিল না। আমি মনে করি এবং আশা করি আমার উত্তরটি এই আত্মীয়টির সমস্যা সমাধানের জন্য একটি সাধারণ ধারণা দেয়।
উমর হায়াত

4
আমি সাথে যাব: int ix = inString.indexOf ('।'); if (ix> -1) inString = inString.substring (0, ix); আমি জানি না কেন উমর ১ টি বিয়োগের পরামর্শ দিয়েছিল। সাবস্ট্রিংয়ের দ্বিতীয় যুক্তিটি যাইহোক বাদ দেওয়া পর্যন্ত।
মিশা বার্গার

4

রেজেেক্স ব্যবহার সম্পর্কে কীভাবে?

String firstWord = filename.replaceAll("\\..*","")

এটি প্রথম বিন্দু থেকে শেষ অবধি সবকিছুকে "" দিয়ে প্রতিস্থাপন করে (যেমন এটি এটি সাফ করে, যা আপনি চান তা রেখে)

এখানে একটি পরীক্ষা:

System.out.println("abc.def.hij".replaceAll("\\..*", "");

আউটপুট:

abc

7
আমি ডাউনভিট করি নি, (এবং আমি সম্মতি জানাই যে লোকেরা বিনা কারণে বিনা বেতনে নামলে) তবে আপনার সমাধানটি বেশ ব্যয়বহুল এবং অতি সুস্পষ্ট নয়।
তোফুবিয়ার

4
@ নিকারলেস-নোগিনস আমি এটি বর্ণনা করতে পারি, আপনি যদি বিশদ চান তবে আমিও তা করতে পারি ... তবে নিশ্চিতভাবে জানিনা আমি কীভাবে এটি একটি মন্তব্যে করতে পারি (সম্ভবত অন্য একটি প্রশ্ন / উত্তর করতে হবে)। এটি ব্যয়বহুল কারণ এটি অক্ষরগুলি প্রতিস্থাপনের সাথে সাথে একটি সম্পূর্ণ নতুন স্ট্রিং তৈরি করে। সাবস্ট্রিং কেবল স্ট্রিংয়ের মধ্যে একটি ভিউ দেয়। এই সাহায্য?
তোফুবিয়ার

4
আপনি কি ভুল বলছেন স্ট্রিংগুলি অপরিবর্তনীয় । সাবস্ট্রিং কোনও দর্শন ফিরিয়ে দেয় না । স্ট্রিং পদ্ধতি থেকে ফিরে আসা প্রতিটি স্ট্রিং একটি নতুন স্ট্রিং।
বোহেমিয়ান

@ নিকারলেস-নোগিনস তিনি ভুল করেছেন ... সাম্প্রতিক মন্তব্য দেখুন। এছাড়াও, এটি যথেষ্ট পরিমাণে কার্যকর। কোডের ঘনত্ব বেশি - এটি "পারফরম্যান্স" এর জন্য আরও কোড যুক্ত করে ন্যায়সঙ্গত করতে তীব্রভাবে ব্যবহার করতে হবে।
বোহেমিয়ান


2

জাভা.এল.আর স্ট্রিং-এ আপনি সূচিপত্র () এর মতো কিছু পদ্ধতি পান: যা আপনাকে প্রথমে একটি চর / স্ট্রিংয়ের সূচক দেয়। এবং lstIndexOf: যা আপনাকে স্ট্রিং / চরের শেষ সূচি দেয়

জাভা ডক থেকে:

  public int indexOf(int ch)
  public int indexOf(String str)

নির্দিষ্ট অক্ষরের প্রথম উপস্থিতির এই স্ট্রিংয়ের মধ্যে সূচকটি প্রদান করে।


2

এখানে এমন কোড যা একটি Stringবর্ণ থেকে প্রদত্ত তালিকার কোনও তালিকা পর্যন্ত একটি স্ট্রিং প্রদান করে:

/**
 * Return a substring of the given original string until the first appearance
 * of any of the given characters.
 * <p>
 * e.g. Original "ab&cd-ef&gh"
 * 1. Separators {'&', '-'}
 * Result: "ab"
 * 2. Separators {'~', '-'}
 * Result: "ab&cd"
 * 3. Separators {'~', '='}
 * Result: "ab&cd-ef&gh"
 *
 * @param original   the original string
 * @param characters the separators until the substring to be considered
 * @return the substring or the original string of no separator exists
 */
public static String substringFirstOf(String original, List<Character> characters) {
    return characters.stream()
            .map(original::indexOf)
            .filter(min -> min > 0)
            .reduce(Integer::min)
            .map(position -> original.substring(0, position))
            .orElse(original);
}

1

এটি সাহায্য করতে পারে:

public static String getCorporateID(String fileName) {

    String corporateId = null;

    try {
        corporateId = fileName.substring(0, fileName.indexOf("_"));
        // System.out.println(new Date() + ": " + "Corporate:
        // "+corporateId);
        return corporateId;
    } catch (Exception e) {
        corporateId = null;
        e.printStackTrace();
    }

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