উদ্দেশ্য-সি - স্ট্রিং থেকে শেষ চরিত্রটি সরান


151

আইওএসের জন্য অবজেক্টিভ-সি-তে, আমি কীভাবে কোনও বোতামের ক্রিয়া ব্যবহার করে কোনও স্ট্রিংয়ের শেষ চরিত্রটি সরিয়ে দেব?

উত্তর:


418

আপনার নিয়ামক শ্রেণিতে, একটি ক্রিয়া পদ্ধতি তৈরি করুন যা আপনি ইন্টারফেস বিল্ডারে বোতামটি হুক করবেন। এই পদ্ধতির অভ্যন্তরে আপনি আপনার স্ট্রিংটি এভাবে ছাঁটাতে পারেন:


if ([string length] > 0) {
    string = [string substringToIndex:[string length] - 1];
} else {
    //no characters to delete... attempting to do so will result in a crash
}






আপনি যদি কোডের এক লাইনে এটি করার একটি অভিনব উপায় চান তবে আপনি এটি লিখতে পারেন:

string = [string substringToIndex:string.length-(string.length>0)];

* অভিনব এক লাইন কোড স্নিপেট এর ব্যাখ্যা:

যদি সেখানে মুছে দেওয়ার একটি চরিত্র (অর্থাত স্ট্রিং এর দৈর্ঘ্য বেশি 0)
     (string.length>0)রিটার্ন 1 এইভাবে কোড ফিরতি তৈরীর:
          string = [string substringToIndex:string.length-1];

যদি সেখানে মুছে ফেলতে একটি অক্ষর (যেমন দৈর্ঘ্য নয় স্ট্রিং 0 এর চেয়ে বেশি নয়) কোডটি
     (string.length>0)রিটার্ন 0করে এমনটি
          string = [string substringToIndex:string.length-0];
     দেয় : যা ক্রাশগুলি প্রতিরোধ করে।


8
আপনার সমাধানটি 1 বাগের মাধ্যমে বন্ধ রয়েছে। এটি হওয়া উচিত [স্ট্রিং সাবট্রিংটো ইন্ডেক্স: [স্ট্রিং দৈর্ঘ্য] - 1];
জিম Correia

"স্ট্রিং" "স্ট্রিং.টেক্সট" বা কেবল স্ট্রিংয়ের নাম উল্লেখ করে
ওমর

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

1
@ ডোনালারফের্টি নিশ্চিত করুন যে আপনার স্ট্রিংটি শূন্য নয়
কোয়ান্টাম্পোটোটো

এটি ঠিক আছে যদি স্ট্রিং শূন্য হয় - এমন একটি পদ্ধতি কল করে যা পূর্ণসংখ্যার মান দেয় তবে ওবজে-সিতে 0 ফিরে আসবে (নোট করুন যে ভাসমান পয়েন্ট রিটার্ন মানগুলির জন্য একই নয়)। যাতে বিবৃতি জিজ্ঞাসা সমতুল্য string != nil && [string length] > 0। ডোনালের স্ট্রিং ভেরিয়েবলটি প্রকাশের সম্ভাবনা বেশি।
মার্ক চার্বোনউ

53

যদি এটি কোনও এনএস পরিবর্তনযোগ্য স্ট্রিং হয় (যা আমি আপনাকে এটি পরিবর্তনশীল পরিবর্তনের কারণে প্রস্তাব করব), আপনি ব্যবহার করতে পারেন:

[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];

8

এখানে প্রদত্ত সমাধানগুলি বাস্তবে মাল্টি-বাইট ইউনিকোড অক্ষর ("রচিত অক্ষর") গ্রহণ করে না এবং এর ফলে অবৈধ ইউনিকোড স্ট্রিং হতে পারে।

আসলে, আইওএস শিরোলেখ ফাইলটিতে যেটির ঘোষণাপত্র substringToIndexরয়েছে তাতে নিম্নলিখিত মন্তব্য রয়েছে:

ইঙ্গিত: সমন্বিত অক্ষরগুলি ভেঙে ফেলা এড়াতে: রেফারফোন কম্পোজড চ্যার্যাক্টর সিকোয়েন্সেসফোর্যাঞ্জের সাথে ব্যবহার করুন

শেষ অক্ষরটিকে সঠিকভাবে মুছতে কীভাবে ব্যবহার করবেন তাrangeOfComposedCharacterSequenceAtIndex: দেখুন ।


6

ডকুমেন্টেশনটি আপনার বন্ধু, এমন NSStringএকটি কল সমর্থন substringWithRangeকরে যা আপনার কাছে স্ট্রিংটি সংক্ষিপ্ত করে তুলতে পারে যে সংক্ষিপ্ত স্ট্রিং আপনার কাছে রয়েছে। আপনি NSStringএটির অপরিবর্তনীয় একটি উদাহরণ সংশোধন করতে পারবেন না । আপনার যদি থাকে NSMutableStringতবে এর একটি পদ্ধতি রয়েছে যা deleteCharactersInRangeস্ট্রিংটিকে পরিবর্তিত করতে পারে

...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...

1
NSMakeRange কখনও কখনও একটি পরিসীমা স্ট্রাক্ট পূরণ করতে আরও কিছুটা মার্জিত করে তোলে।
ড্রিমলাক্স

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