জাভা 11-এ স্ট্রিং ট্রিম () এবং স্ট্রিপ () পদ্ধতির মধ্যে পার্থক্য


103

অন্যান্য পরিবর্তনগুলির মধ্যে, জেডিকে 11 জাভা.ং. স্ট্রিং ক্লাসের জন্য 6 টি নতুন পদ্ধতি প্রবর্তন করেছে:

  • repeat(int)- intপ্যারামিটারের দ্বারা সরবরাহ করা স্ট্রিংটিকে যতবার পুনরাবৃত্তি করে
  • lines() - উত্স স্ট্রিং থেকে অলসভাবে লাইন সরবরাহ করতে একটি স্প্লিট্রেটর ব্যবহার করে
  • isBlank() - স্ট্রিংটি খালি থাকলে বা কেবল শ্বেত স্পেস অক্ষর রয়েছে কিনা তা সূচিত করে
  • stripLeading() - প্রথম থেকেই সাদা স্থান সরিয়ে দেয়
  • stripTrailing() - প্রান্ত থেকে সাদা স্থান সরিয়ে দেয়
  • strip() - স্ট্রিংয়ের শুরু এবং শেষ দুটি থেকে সাদা স্থান সরিয়ে দেয়

বিশেষত, strip()দেখতে খুব অনুরূপ trim()। অনুযায়ী এই নিবন্ধটি strip*() পদ্ধতি করার জন্য ডিজাইন করা হয়:

স্ট্রিং.স্ট্রিপ (), স্ট্রিং.স্ট্রিপলাইডিং (), এবং স্ট্রিং.স্ট্রিপট্রেইলিং () পদ্ধতিগুলি সাদা স্থান [ট্র্যাক্টর.আইসওয়াইটস্পেস ()] দ্বারা লক্ষ্যযুক্ত স্ট্রিংয়ের সামনের, পিছনে বা উভয়দিকেই ট্রিম করে tri

String.trim() জাভাডক বলেছেন:

/**
  * Returns a string whose value is this string, with any leading and trailing
  * whitespace removed.
  * ...
  */

যা উপরের উক্তির সাথে প্রায় একই রকম।

জাভা 11 এর মধ্যে String.trim()এবং ঠিক পার্থক্য কি String.strip()?

উত্তর:


105

সংক্ষেপে: strip()"ইউনিকোড-সচেতন" এর বিবর্তন trim()

সিএসআর: জেডিকে -৮২০০৩78।

সমস্যা

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

স্ট্রিং :: ট্রিম দ্বারা ব্যবহৃত স্থানের সংজ্ঞাটি স্পেস কোড পয়েন্ট (\ u0020) এর চেয়ে কম বা সমান কোনও কোড পয়েন্ট যা সাধারণত ASCII বা আইএসও নিয়ন্ত্রণ অক্ষর হিসাবে পরিচিত।

ইউনিকোড-সচেতন ট্রিমিং রুটিনগুলিতে ক্যারেক্টার :: isWhitespace (int) ব্যবহার করা উচিত।

অতিরিক্তভাবে, বিকাশকারীরা নির্দিষ্টভাবে ইনডেন্টেশন সাদা স্থান মুছে ফেলতে বা বিশেষভাবে অনুসরণযোগ্য সাদা স্থান সরাতে সক্ষম হননি।

সমাধান

ইউনিকোড সাদা স্থান সচেতন ট্রিমিং পদ্ধতিগুলি উপস্থাপন করুন এবং কেবলমাত্র নেতৃত্বের বা কেবল অনুসরণের অতিরিক্ত নিয়ন্ত্রণ সরবরাহ করে।

এই নতুন পদ্ধতির একটি সাধারণ বৈশিষ্ট্য হ'ল তারা পুরানো পদ্ধতির যেমন "হোয়াইটস্পেস" এর আলাদা (নতুন) সংজ্ঞা ব্যবহার করে String.trim()। বাগ JDK-8200373

স্ট্রিংয়ের জন্য বর্তমান জাভাডোক :: ট্রিম কোডটিতে "স্পেস" এর কোন সংজ্ঞা ব্যবহৃত হচ্ছে তা পরিষ্কার করে না। অদূর ভবিষ্যতে অতিরিক্ত ট্রিমিং পদ্ধতি আসার সাথে সাথে যে স্থানের একটি পৃথক সংজ্ঞা ব্যবহার করে, স্পষ্টকরণ জরুরী। স্ট্রিং :: ট্রিম স্পেসের সংজ্ঞাটিকে কোনও কোডপয়েন্ট হিসাবে স্থান হিসাবে চিহ্নিত করে যা স্থানের অক্ষর কোডপয়েন্ট (\ u0020।) এর চেয়ে কম বা সমান হয় New নতুন ট্রিমিং পদ্ধতিগুলি (সাদা) স্থানের সংজ্ঞাটি কোনও কোডপয়েন্ট হিসাবে ব্যবহার করবে যা পাস করার সময় সত্য ফিরে আসে চরিত্র :: isWhitespace predicate।

পদ্ধতিটি জেডিকে ১.১ সহ isWhitespace(char)যুক্ত করা হয়েছিল Character, তবে জেডিকে ২.৩.২০ isWhitespace(int)না Characterহওয়া পর্যন্ত পদ্ধতিটি ক্লাসে চালু করা হয়নি। intপরিপূরক চরিত্রগুলিকে সমর্থন করার জন্য পরবর্তী পদ্ধতি (যিনি ধরণের পরামিতি গ্রহণ করেন ) যুক্ত করা হয়েছিল। Characterশ্রেণীর জন্য জাভাডোক মন্তব্য পরিপূরক চরিত্রগুলি সংজ্ঞায়িত করে (সাধারণত অন্তর্নিহিত "কোড পয়েন্ট" সহ মডেল) বনাম বিএমপি অক্ষর (সাধারণত একক চরিত্রের সাথে মডেলিং):

U +0000 থেকে U + FFFF পর্যন্ত অক্ষরের সেটটিকে মাঝে মাঝে বেসিক বহুভাষিক সমতল (বিএমপি) হিসাবে উল্লেখ করা হয় referred যে অক্ষরগুলির কোড পয়েন্টগুলি ইউ + এফএফএফএফের চেয়ে বেশি, তাদের পরিপূরক অক্ষর বলে। জাভা প্ল্যাটফর্মটি চর অ্যারেতে এবং স্ট্রিং এবং স্ট্রিংবফার ক্লাসে UTF-16 উপস্থাপনা ব্যবহার করে। এই উপস্থাপনায়, পরিপূরক অক্ষরগুলি চর মানগুলির জোড় হিসাবে উপস্থাপিত হয় ... একটি চর মান, অতএব, সারোগেট কোড পয়েন্টগুলি বা ইউটিএফ -16 এনকোডিংয়ের কোড ইউনিট সহ বেসিক বহুভাষিক প্লেন (বিএমপি) কোড পয়েন্টগুলি উপস্থাপন করে। পরিসংখ্যান মান পরিপূরক কোড পয়েন্ট সহ সমস্ত ইউনিকোড কোড পয়েন্ট উপস্থাপন করে। ... যে পদ্ধতিগুলি কেবল একটি চর মান গ্রহণ করে সেগুলি পরিপূরক চরিত্রগুলিকে সমর্থন করতে পারে না। ... যে মানগুলি একটি মান গ্রহণ করে সেগুলি পরিপূরক চরিত্রগুলি সহ সমস্ত ইউনিকোড অক্ষরকে সমর্থন করে।

OpenJDK Changeset


মধ্যে বেঞ্চমার্ক তুলনা trim()এবং strip()- কেন String.strip () ফাঁকা স্ট্রিং এর জন্য String.trim () থেকেও ২5 গুন দ্রুত জাভা 11 হয়


6
আকর্ষণীয় যে প্রতীক 'symbol u0000' স্ট্রিপ দ্বারা মুছে ফেলা হয় না, তবে ছাঁটাই দ্বারা মুছে ফেলা হয়।
CHEM_Eugene

32

এখানে একটি ইউনিট-পরীক্ষা দেওয়া হয়েছে যা জাভা 11 ব্যবহার করে @ মিখাইলখোলডকভের উত্তরটি চিত্রিত করে।

(উল্লেখ্য যে \u2000উপরে \u0020এবং এটি সাদা স্থান বিবেচনা করে না trim())

public class StringTestCase {
    @Test
    public void testSame() {
        String s = "\t abc \n";

        assertEquals("abc", s.trim());
        assertEquals("abc", s.strip());
    }

    @Test
    public void testDifferent() {
        Character c = '\u2000';
        String s = c + "abc" + c;

        assertTrue(Character.isWhitespace(c));
        assertEquals(s, s.trim());
        assertEquals("abc", s.strip());
    }
}

0

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

ছাঁটাই () সমস্ত অগ্রণী এবং অনুসরণীয় চরিত্র সরিয়ে দেয় যার ASCII মান 32 ('U + 0020' বা স্পেস) এর চেয়ে কম বা সমান

ইউনিকোডের মান অনুসারে বিভিন্ন স্থানের অক্ষর রয়েছে যার ASCII মান 32 ('U + 0020') এর বেশি থাকে। উদাঃ 8193 (ইউ + 2001)।

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

11 টি নতুন স্পেস স্ট্রিপ যা জাভা 11-এ যুক্ত হয় এই ক্যারেক্টারটি ব্যবহার করে is সাদা স্পেস অক্ষরের বিস্তৃত পরিসীমাটি মুছে ফেলতে এবং এগুলি সরানোর জন্য এই অক্ষরটি ব্যবহার করুন is

উদাহরণ

public class StringTrimVsStripTest {
    public static void main(String[] args) {
        String string = '\u2001'+"String    with    space"+ '\u2001';
        System.out.println("Before: \"" + string+"\"");
        System.out.println("After trim: \"" + string.trim()+"\"");
        System.out.println("After strip: \"" + string.strip()+"\"");
   }
}

আউটপুট

Before: "  String    with    space  "
After trim: " String    with    space "
After strip: "String    with    space"

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

উল্লেখ: ট্রিম এবং ফালা পদ্ধতি জাভা মধ্যে পার্থক্য

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