iPhone: stringByReplacingOccurrencesOfString: withString: options: range:


iPhone: stringByReplacingOccurrencesOfString:withString:options:range:

การแทนที่ String ด้วย String เป็นฟังก์ชั่นที่เราใช้กันบ่อยมาก บทความนี้จะยกตัวอย่างของการแปลงหมายเลขโทรศัพท์ ธรรมดา ให้เป็นเบอร์โทรศัพท์ที่มีหมายเลขรหัสประเทศ +66 นำหน้า หลักการง่ายๆ คือ จะเปลี่ยนจากเลข 0 เป็น +66 นั้นเองครับ มาดูกันว่าทริคมันจะอยู่ตรงไหนบ้าง

ตัวอย่างที่ 1 เปลี่ยนจาก 021356678 เป็น +6621356678


NSString *myDial = @"021356678";
NSLog(@"%@",[myDial stringByReplacingOccurrencesOfString:@"0" withString:@"+66"]);//+6621356678

จากโค้ดตัวอย่างที่ 1 เป็นการใช้ฟังก์ชั่น stringByReplacingOccurencesOfString:@”ใส่สติงที่ต้องเปลี่ยนออก” withString:@”ใส่สติงที่ต้องการเปลี่ยนเข้า” โดยฟังก์ชั่นนี้จะใช้งานง่ายและเหมาะกับการเปลี่ยนทั้งหมดข้อความ แต่อาจจะเกิดปัญหาหากเป็นอย่างตัวอย่างที่ 2

ตัวอย่างที่ 2 เปลี่ยนจาก 021100022 เป็น +6621100022

หากเราใช้โค้ดเดิมจากตัวอย่างที่ 1 จะได้ผลลัพธ์เป็น +66211+66+66+6622


NSString *myDial = @"021100022";
NSLog(@"%@",[myDial stringByReplacingOccurrencesOfString:@"0" withString:@"+66"]);//+66211+66+66+6622

เริ่มเห็นปัญหาแล้วใช่มั้ยครับ คือมันดันไปเปลี่ยนทั้งข้อความ ในสถานะการที่เราต้องการให้เปลี่ยนแค่ตัวหน้าตัวเดียวเท่านั้น (แต่หากต้องการเปลี่ยนทั้งข้อความใช้วิธีตามตัวอย่างที่ 1 ก็เหมาะสมเช่นกันครับ) เรามาดูวิธีแก้ไขกัน

โดยที่ NSString Class นั้นมีฟังก์ชั่น stringByReplacing นี้อยู่ 2  ฟังก์ชั่น โดย

  • ฟังก์ชั่นแรก จะเป็นการเปลี่ยนทั้งข้อความ
  • ฟังก์ชั่นที่สอง จะเป็นการเปลี่ยนเฉพาะตำแหน่งที่เราต้องการ ครับ

ตัวอย่างที่ 3 การแก้ไขปัญหาในตัวอย่างที่ 2

เราจะเปลี่ยนมาใช้ฟังก์ชั่น stringByReplacing ที่มีพารามิเตอร์เพิ่มขึ้นนะครับ เพื่อระบุตำแหน่งที่เราต้องการเปลี่ยนนั้นเอง ดังโค้ดด้านล่างครับ


NSString *myDial = @"021100022";
NSLog(@"%@",[myDial stringByReplacingOccurrencesOfString:@"0"
withString:@"+66"
options:0
range:NSMakeRange(0, 1)]);//+6621100022

เราเลือกใช้ฟังก์ชั่น stringByReplacingOccurrencesOfString:withString:options:range: สำหรับสองพารามิเตอร์แรกได้บอกไปแล้ว ต่อมาเรามารู้จักกับอีกสองพารามิเตอร์ที่เหลือกันดีกว่า

options (NSStringCompareOptions) โดยเราจะใส่ option การเปรียบเทียบได้ แต่ในตัวอย่างนี้เราไม่ใช้นะครับ เลยใส่ 0 เอาไว้ก่อน แต่! อย่างใส่ NULL หรือ nil นะครับ เพราะโปรแกรมจะแจ้งเตือนว่าเป็นการใส่ค่าผิดประเภท ดังนั้นต้องใส่ 0 เท่านั้นเมื่อไม่ต้องการเปรียบเทียบ แต่หากต้องการเปรียบเทียบยังไงนั้นผมติดไว้ก่อนครับ ค่อยมาต่อกันบทความหน้า

range (NSRange) เป็นการระบุตำแหน่งและขนาดที่เราจะทำการ replace ตัวอย่างการสร้าง NSRange คือ NSMakeRange(ตำแหน่ง,ขนาด) จากตัวอย่างใส่  ตำแหน่ง 0 คือเริ่มค้นหาที่ตำแหน่ง 0 ของข้อความ และขนาด 1 คือ ให้ค้นหาไปแค่ 1 ตัวเท่านั้น ดังนั้นการค้นหาและเปลี่ยนค่าในตัวอย่างที่ 3 จะไม่ไปเปลี่ยนเลข 0 ตัวต่อๆ มา เหมือนตัวอย่างที่ 2 นั้นเองครับ

ก็เรียบร้อยไปครับ สำหรับฟังก์ชั่นที่แสนจะธรรมดาๆ แต่ก็มีทริคให้เราได้ค้นหาอยู่เสมอครับ และอย่าลืมพยายามใช้ฟังก์ชั่นที่มีให้ตรงกับผลลัพธ์ที่ต้องการด้วยนะครับ หากไม่เช่นนั้นแล้วเราอาจจะไม่ได้ผลลัพธ์ตามต้องการ นะเอ๋อ สวัสดีครับ…

Reference

adaydesign :)

About adaydesign

นักพัฒนาแอพพลิเคชั่นบนโมบาย [iPhone Android] คนหนึ่งซึ่งอยากจะบันทึกเรื่องราวของเส้นทางนักพัฒนาโมบายแอพพลิเคชั่นเอาไว้ในบล็อคน้อยๆ แห่งนี้ เผื่อจะแบ่งบันและแลกเปลี่ยนความรู้ให้กับคนอื่นๆ ได้บ้าง :) Mobile Application Developer; Flash Mobile, iPhone/iPad, Android Mobile Phone/Tablet and Blackberry Playbook.

Posted on มิถุนายน 3, 2011, in [Dev] iOS and tagged , , . Bookmark the permalink. ใส่ความเห็น.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: