স্ট্রিং.স্লাইস এবং স্ট্রিং.সুবস্ট্রিংয়ের মধ্যে পার্থক্য কী?


832

কেউ কি জানেন যে এই দুটি পদ্ধতির মধ্যে পার্থক্য কী?

String.prototype.slice
String.prototype.substring

215
এটি জাভাস্ক্রিপ্টের দুর্বল নকশার একটি উদাহরণ যা আমরা তিনটি পদ্ধতিতে শেষ করেছি যা সবাই একই কাজ করে তবে ভিন্ন ভিন্ন প্রশ্ন নিয়ে। sliceসবচেয়ে অপ্রত্যাশিত আচরণের সাথে আইএমও হ'ল।
ববিনস

2
আইএমএক্স স্ট্রিং যখন আইডিএক্স থেকে শেষ অবধি স্ট্রিং ব্যবহার করা হয় তখন এক নজরে আরও বোধগম্য হয়। বিশেষত
নুবগুলিকে

1
এই ওয়েবসাইট অনুসারে , sliceআসলে প্রতিস্থাপন substringকরতে পারেন এবং এটি ব্যবহার করার কোনও কারণ নেই।
ডেরেক 朕 會 功夫

5
@ আমলমকুলকার্নি মোটেও সত্য নয়। যদি আপনি চেষ্টা করেন তবে var a = "asdf".substring(-1);এটি হিসাবে বিবেচিত হবে var a = "asdf".substring(0);। কোনও ব্যতিক্রম ছুঁড়ে দেওয়া হয়নি। এবং যদি আপনি ব্যবহার করেন তবে var a = "asdf".substring(2, -1);এটি (আগের মত) 0এর জায়গায় ব্যবহার করে এবং -1যুক্তিগুলি অদলবদল করে যাতে এটি কাজ করে var a = "asdf".substring(0, 2);। এমনকি আমি IE 8 এও চেষ্টা করেছি এবং কোনও ব্যতিক্রম ছাড়াই ফলাফল পেয়েছি
ইয়ান

35
"আমি এমনকি IE 8 এও চেষ্টা করেছি" - আমি প্রোগ্রামিং পছন্দ করি।
নিরব

উত্তর:


858

slice()substring()কয়েকটি ভিন্ন আচরণের মতো কাজ করে।

Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);

তাদের মধ্যে কী মিল রয়েছে:

  1. যদি startসমান হয় stop: একটি খালি স্ট্রিং প্রদান করে
  2. যদি stopবাদ দেওয়া হয়: স্ট্রিংয়ের শেষে অক্ষরগুলি বের করে
  3. যদি কোনও যুক্তি স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে বড় হয় তবে তার পরিবর্তে স্ট্রিংয়ের দৈর্ঘ্য ব্যবহৃত হবে।

এর পার্থক্য :substring()

  1. যদি start > stopতা হয় তবে substringসেই 2 টি আর্গুমেন্ট অদলবদল করবে।
  2. যদি উভয় পক্ষের যুক্তি নেতিবাচক হয় বা হয় NaNতবে এটির মতো আচরণ করা হয় 0

এর পার্থক্য :slice()

  1. যদি start > stop, slice()খালি স্ট্রিংটি ফেরত দেবে। ( "")
  2. যদি startনেতিবাচক হয়: substr()ফায়ারফক্সের মতো স্ট্রিংয়ের শেষে থেকে চর সেট করে। এই আচরণটি ফায়ারফক্স এবং আইই উভয় ক্ষেত্রেই পরিলক্ষিত হয়।
  3. যদি stopনেতিবাচক হয়: সেট বাধা: string.length – Math.abs(stop)(মূল মান) ছাড়া (, এইভাবে 0 এ বেষ্টিত Math.max(0, string.length + stop)) হিসাবে মধ্যে আবৃত ECMA স্পেসিফিকেশন

উত্স: প্রোগ্রামিং অ্যান্ড ডেভলপমেন্টের রুডিমেন্টারি আর্ট: জাভাস্ক্রিপ্ট: সাবস্ট্রাস্ট () বনাম সাবস্ট্রিং ()


8
আপনার শেষ নোটটিতে slice(), এটি হওয়া উচিতstring.length - stop
অ্যান্ডি

16
আপনার শেষ নোটটিতে slice(), আমি মনে করি এটি হওয়া উচিত (string.length – 1) + stopবা এটি স্পষ্ট করে এটি নেতিবাচক,(string.length – 1) – Math.abs(stop)
ওরিওল

9
@ লংপোক: যুক্ত String.sliceকরা হয়েছিল যাতে একটি স্ট্রিং পদ্ধতির সাথে সামঞ্জস্য থাকে Array.slicesubstringচিরকাল সেখানে রয়েছে, তাই তারা এটি ভাঙ্গেনি এবং অন্য একটি পদ্ধতি যুক্ত করেছে। 1. হিসাবে সামান্যই একটি কৃপণ সিদ্ধান্ত। ধারাবাহিকতা দুর্দান্ত এবং 2. এটি কফিস্ক্রিপ্টের টুকরা সিনট্যাক্সটিকে অ্যারে এবং স্ট্রিংগুলিতে কাজ করার অনুমতি দেয়। @Oriol: এটা সম্পাদনা করা হয়েছে।
ভেড়া উড়ন্ত

6
ফায়ারফক্স ২২ এ সাবস্ট্রিং এবং স্লাইসের মধ্যে পারফরম্যান্সের পার্থক্য রয়েছে বলে মনে হয় j jsperf.com/string-slice-vs-substring
রিক

4
অ্যান্ডি ঠিক ছিল। negativeণাত্মক হলে stopসেট করা হবে । শেষ চরিত্রটি উত্তোলনের পরে সূচকটি মনে রাখবেন ! string.length + stopstopstop
ব্যবহারকারী 1537366

97

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


আমাকে তথ্য উল্লেখ করে শুরু করুন:

সিনট্যাক্স:
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
নোট # 1:slice()==substring()

এর মানে কি? একটি স্ট্রিং পদ্ধতি নির্যাস অংশ এবং আয় একটি নতুন স্ট্রিং বের অংশ। একটি স্ট্রিং পদ্ধতি নির্যাস অংশ, নির্দিষ্ট অবস্থানে থাকা চরিত্র লোক থেকে শুরু করে এবং আয় অক্ষরের নির্দিষ্ট সংখ্যা। একটি স্ট্রিং পদ্ধতি নির্যাস অংশ এবং আয় একটি নতুন স্ট্রিং বের অংশ। নোট # 2:
slice()
substr()
substring()
slice()==substring()

মূল স্ট্রিং পরিবর্তন করে?
slice()না না
substr()না না
substring()না না
# 3 দ্রষ্টব্য:slice()==substring()

নেতিবাচক নম্বরগুলি আর্গুমেন্ট হিসাবে ব্যবহার করা:
slice()স্ট্রিংয়ের
substr()শেষে থেকে শুরু হওয়া অক্ষর নির্বাচন করে স্ট্রিংয়ের শেষ থেকে শুরু হওয়া অক্ষর নির্বাচন করে নোট # 3
substring()সম্পাদন করে না
:slice()==substr()

যদি প্রথম আর্গুমেন্ট দ্বিতীয়টির চেয়ে বেশী:
slice()নেই সঞ্চালন করা
substr()থেকে দ্বিতীয় যুক্তি একটি অবস্থান নয়, কিন্তু দৈর্ঘ্য মান, এটা স্বাভাবিক হিসাবে পারফর্ম করবেন কোন সমস্যার সঙ্গে
substring()দুটি আর্গুমেন্ট অদলবদল হবে, এবং যথারীতি সঞ্চালন

প্রথম যুক্তি:
slice()প্রয়োজনীয়, নির্দেশিত: সূচি প্রারম্ভিক
substr()প্রয়োজনীয়, ইঙ্গিত: সূচক শুরু করা
substring()প্রয়োজনীয়, ইঙ্গিত: সূচি
নোট # 4 শুরু করা:slice()==substr()==substring()

দ্বিতীয় যুক্তি:
slice()ptionচ্ছিক, অবস্থান (আপ পর্যন্ত, তবে অন্তর্ভুক্ত নয়) যেখানে এক্সট্রাকশনটি শেষ করতে হবে ption
substr()চ্ছিক, charactersচ্ছিক নিষ্কাশনের জন্য অক্ষরের সংখ্যা
substring(), অবস্থান (পর্যন্ত, তবে অন্তর্ভুক্ত নয়) যেখানে এক্সট্রাকশনটি শেষ করবেন
নোট # 5:slice()==substring()

দ্বিতীয় যুক্তি যদি ছাড় হয় তবে কী হবে?
slice()স্ট্রিংয়ের
substr()শুরু থেকে শুরু পর্যন্ত সমস্ত অক্ষর নির্বাচন করে স্ট্রিংয়ের শুরু থেকে শুরু করে স্ট্রিংয়ের শেষে
substring()সমস্ত অক্ষর নির্বাচন করে স্ট্রিং-এর শেষে স্টার্টের অবস্থান থেকে সমস্ত অক্ষর নির্বাচন করুন
নোট # 6:slice()==substr()==substring()

তাই হয়, আপনি বলতে পারেন তার মাঝে একটি পার্থক্য যে slice()এবং substr()সময়, substring()মূলত একটি অনুলিপি slice()

সংক্ষিপ্তসার:
আপনি যদি সূচকটি (অবস্থান) জানেন যা আপনি থামিয়েছেন (তবে অন্তর্ভুক্ত নয়), slice()
আপনি কী পরিমাণ অক্ষর ব্যবহার করতে হবে তা ব্যবহার করতে জানেন কিনা তা ব্যবহার করুন substr()


11
সাবস্ট্রাস্ট () ব্যবহার করা উচিত নয় ডেভেলপার.মোজিলা.আর.ইন.ইউএস
কিলি

24

বেন নাদেল এ সম্পর্কে একটি ভাল নিবন্ধ লিখেছেন, তিনি এই ফাংশনগুলির মধ্যে পরামিতিগুলির পার্থক্যটি উল্লেখ করেছেন:

String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )

তিনি আরও উল্লেখ করেছেন যে স্লাইসের পরামিতিগুলি যদি নেতিবাচক হয় তবে তারা স্ট্রিংটি শেষ থেকে রেফার করে। সাবস্ট্রিং এবং সাবস্ট্রাস্ট করা হয় না।

এই সম্পর্কে তার নিবন্ধ এখানে


3
এটি ভুল, সাবস্ট্রটার নেতিবাচক পরামিতিগুলি পরিচালনা করে। '0123456789'.substr(-3, 2) -> '78'
নীল ফ্রেজার

14

একটি উত্তর ঠিক আছে তবে এতে কিছুটা পড়া দরকার। বিশেষত নতুন পরিভাষা "স্টপ" দিয়ে।

আমার গো - উপরের ড্যানিয়েলের প্রথম উত্তর ছাড়াও এটি কার্যকর করার জন্য পার্থক্য দ্বারা সংগঠিত:

1) নেতিবাচক সূচী। সাবস্ট্রিংয়ের ইতিবাচক সূচকগুলির প্রয়োজন হয় এবং এটি একটি নেতিবাচক সূচক 0 এ সেট করে দেবে Sl

"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"

2) সূচকগুলি অদলবদল করা। সাবস্ট্রিং সূচকগুলি দ্বিতীয় সূচকের চেয়ে কম বা সমান করতে সূচিগুলিকে পুনরায় অর্ডার করবে।

"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""

--------------------------

সাধারণ মন্তব্য - আমি এটি অদ্ভুত মনে করি যে দ্বিতীয় সূচকটি স্লাইস বা স্ট্রিংয়ের শেষ চরিত্রের পরে অবস্থান। আমি প্রত্যাশা করব "1234" .স্লাইস (2,2) "3" ফিরে আসবে। এটি অ্যান্ডির বিভ্রান্তিকে ন্যায়সঙ্গত করে তুলেছে - আমি "1234" আশা করব wouldস্লাইস (2, -1) "34" ফিরে আসবে। হ্যাঁ, এর অর্থ আমি জাভাস্ক্রিপ্টে নতুন। এর অর্থ এই আচরণও:

"1234".slice(-2, -2) == "", "1234".slice(-2, -1) == "3", "1234".slice(-2, -0) == "" <-- you have to use length or omit the argument to get the 4.
"1234".slice(3, -2) == "", "1234".slice(3, -1) == "", "1234".slice(3, -0) == "" <-- same issue, but seems weirder.

আমার 2 সি।


11

সাবস্ট্রিং এবং স্লাইসের মধ্যে পার্থক্য - এগুলি কীভাবে বিদেশে যুক্তিগুলির সাথে নেতিবাচক এবং উপেক্ষার রেখাগুলির সাথে কাজ করে:

সাবস্ট্রিং (শুরু, শেষ)

নেতিবাচক যুক্তিগুলি শূন্য হিসাবে ব্যাখ্যা করা হয়। স্ট্রিংয়ের দৈর্ঘ্যে অনেক বড় মান ছাঁটা হয়েছে: সতর্কতা ("টেস্টমে" .সুবস্ট্রিং (-2)); // "টেস্টমে", -2 0 হয়

তদ্ব্যতীত, যদি শুরু> শেষ হয়, আর্গুমেন্টগুলি একে অপরের সাথে পরিবর্তিত হয়, অর্থাত শুরু এবং শেষের মধ্যে প্লট লাইন ফিরে আসে:

alert ( "testme" .substring (4, -1)); // "test"
// -1 Becomes 0 -> got substring (4, 0)
// 4> 0, so that the arguments are swapped -> substring (0, 4) = "test"

ফালি

নেতিবাচক মানগুলি রেখার শেষ থেকে পরিমাপ করা হয়:

alert ( "testme" .slice (-2)); // "me", from the end position 2
alert ( "testme" .slice (1, -1)); // "estm", from the first position to the one at the end.

এটি অদ্ভুত যুক্তিযুক্ত সাবস্ট্রিংয়ের চেয়ে অনেক বেশি সুবিধাজনক।

আইই 8- বাদে সমস্ত ব্রাউজারগুলিতে সাবস্ট্রেটে সমর্থিত প্রথম প্যারামিটারের নেতিবাচক মান।

বেশিরভাগ পরিস্থিতিতে ব্যবহারের জন্য যদি এই তিনটি পদ্ধতির মধ্যে কোনও একটির পছন্দ পছন্দ করে - এটি স্লাইস হবে : নেতিবাচক যুক্তি এবং এটি বজায় রাখে এবং পরিচালনা করে সবচেয়ে সুস্পষ্ট।


4

সাবস্ট্রাস্ট: এটি নির্দিষ্ট সূচকের ভিত্তিতে স্ট্রিংয়ের কিছু অংশ আনতে আমাদের সরবরাহ করছে providing সাবস্ট্রিং-স্ট্রিং.সুবস্ট্রের সূচনা (শুরু, শেষ) শুরু - সূচী সূচীটি যেখানে আনতে শুরু করে তা বলে। শেষ-সূচকটি সূচিত করে যেখানে স্ট্রিংটি আনছে। এটি .চ্ছিক।

স্লাইস: এটি নির্দিষ্ট সূচকের ভিত্তিতে স্ট্রিংয়ের কিছু অংশ আনতে সরবরাহ করে। এটি আমাদের ইতিবাচক এবং সূচক নির্দিষ্ট করতে দেয়। স্লাইসের সিনট্যাক্স - স্ট্রিং.স্লাইস (শুরু, শেষ) সূচনা - সূচক সূচিটি আনছে যেখানে আনতে হবে তা শুরু করে I এটির শেষে - সূচকটি স্ট্রিং আনার সময় পর্যন্ত বলে। এটি .চ্ছিক। 'স্প্লাইস'-এ শুরু এবং শেষ উভয় সূচকই ইতিবাচক এবং negativeণাত্মক সূচক নিতে সহায়তা করে।

স্ট্রিংয়ে 'স্লাইস' এর জন্য নমুনা কোড

var str="Javascript";
console.log(str.slice(-5,-1));

output: crip

স্ট্রিংয়ে 'সাবস্ট্রিং' এর জন্য নমুনা কোড

var str="Javascript";
console.log(str.substring(1,5));

output: avas

[* দ্রষ্টব্য: নেতিবাচক সূচকটি স্ট্রিংয়ের শেষে শুরু হয়]]


3

স্লাইস এবং সাবস্ট্রিং পদ্ধতির মধ্যে পার্থক্য কেবল আর্গুমেন্ট

উভয়ই দুটি আর্গুমেন্ট গ্রহণ করে eg যেমন শুরু / শেষ এবং শেষ / থেকে।

আপনি স্ট্রিং পদ্ধতির জন্য প্রথম আর্গুমেন্ট হিসাবে কিন্তু স্লাইস পদ্ধতির জন্য এটি শেষ থেকে অতিক্রম করতে কোনও নেতিবাচক মান পাস করতে পারবেন না ।

স্লাইস পদ্ধতির যুক্তির বিবরণ:

REF: http://www.thesstech.com/javascript/string_slice_method

যুক্তি

start_index সূচি যেখান থেকে স্লাইস শুরু করা উচিত। মানটি যদি নেতিবাচকভাবে সরবরাহ করা হয় তবে এর অর্থ শেষ থেকে শুরু। যেমন -1 শেষ চরিত্রের জন্য। END_INDEX স্লাইস শেষ হওয়ার পরে সূচক। যদি সরবরাহ না করা হয় তবে স্লাইসটি স্টার্ট-ইনডেক্স থেকে স্ট্রিংয়ের শেষে নেওয়া হবে। নেতিবাচক মান সূচকের ক্ষেত্রে স্ট্রিংয়ের শেষে থেকে পরিমাপ করা হবে।

সাবস্ট্রিং পদ্ধতির যুক্তি বিশদ:

রেফ: http://www.thesstech.com/javascript/string_substring_method

যুক্তি

থেকে যেখানে উপ-স্ট্রিং শুরু করা উচিত থেকে সূচক নির্দিষ্ট করার একটি অ নেতিবাচক পূর্ণসংখ্যা হওয়া উচিত। কোন উপ-স্ট্রিংটি শেষ করা উচিত তার আগে সূচক সরবরাহ করতে একটি alচ্ছিক অ-নেতিবাচক পূর্ণসংখ্যায়।


0

কারণ slice(start, stop), যদি stopনেতিবাচক হয় তবে stopসেট করা হবে:

string.length  Math.abs(stop)

বরং:

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