วันศุกร์ที่ 3 มิถุนายน พ.ศ. 2554

iPhone: stringByReplacingOccurrencesOfString: withString: options: range:

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

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

[sourcecode language="obj-c"]

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

[/sourcecode]

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

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

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

[sourcecode language="obj-c"]

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

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

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

  • ฟังก์ชั่นแรก จะเป็นการเปลี่ยนทั้งข้อความ

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


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

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

[sourcecode language="obj-c"]

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

[/sourcecode]

เราเลือกใช้ฟังก์ชั่น 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 :)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น