ที่จริงแล้วไม่มีเนื้อหาทางเทคนิคเพราะฉันจำไม่ได้ดังนั้นฉันจะบันทึกไว้ในบทความนี้
โดยปกติจะมีข้อความ SMS จำนวนมากในระบบแอปพลิเคชันของเราหรือส่งข้อความ ฯลฯ แต่ข้อความเหล่านี้มีความธรรมดาเหมือนกันเช่นเพียงแค่เปลี่ยนชื่อผู้ใช้
เช่นเดียวกับด้านล่างยกเว้นตัวอักษรสีแดงส่วนที่เหลือจะเหมือนกัน
เรียนลูกค้า: บัญชี Alipay ของคุณ 110 **** 11 สินเชื่อผู้ค้าออนไลน์ที่ทำสัญญาควรได้รับการชำระคืน 1999.99 หยวนในปี 2018-06-10 ระบบจะหักยอดคงเหลือของบัญชี Alipay โดยอัตโนมัติบัตรออมทรัพย์ที่ถูกผูกไว้ Yu'ebao บัญชีการชำระบัญชีธนาคารประกาศของคุณและ Yu'ebao (ถ้ามี) ในปี 2018-06-10 เนื่องจากข้อ จำกัด ที่ จำกัด ในการชำระคืนเงินกู้ยอดคงเหลือและการออมบัตรโปรดให้ความสำคัญกับการสร้างความสำคัญกับความสมดุลของ Yu'ebao บัญชีการชำระบัญชีธนาคารประกาศและ Yu'ebao นั้นเพียงพอแล้ว (หากคุณได้รับเงินคืนแล้วโปรดเพิกเฉยต่อข้อมูลนี้) [Anti-Commerce Bank]
นักเรียนที่แตกต่างกันอาจมีวิธีแก้ปัญหาที่แตกต่างกัน นี่คือวิธีแก้ปัญหาของฉันสำหรับการอ้างอิงของคุณ แน่นอนถ้ามีทางออกที่ดีกว่าคุณสามารถแบ่งปันได้ ~
โซลูชัน 1: โหมดยากรหัส
สามารถเป็น hardcoded ในรหัสหรืออ่านในไฟล์การกำหนดค่า นักเรียนที่มีประสบการณ์การเขียนโค้ดควรเขียน
ข้อดี: เนื้อหาข้อความนั้นใช้งานง่ายและมองเห็นได้และเนื้อหาข้อความสามารถแก้ไขได้โดยตรงในรหัส
ข้อเสีย: รหัสนั้นซ้ำซ้อนและไม่กระชับและยากที่จะทำให้เซิร์ฟเวอร์เริ่มต้นใหม่เนื่องจากความต้องการที่หลีกเลี่ยงไม่ได้ในการแก้ไขเนื้อหาข้อความ
โซลูชัน 2: เก็บในฐานข้อมูล
จัดเก็บเทมเพลตข้อความทั่วไปในเซิร์ฟเวอร์และอ่านและแยกวิเคราะห์โดยตรงจากฐานข้อมูลเมื่อจำเป็น
การวิเคราะห์หลังจากการอ่านนั้นเชื่อว่าเป็นพันคนและวิธีการแต่ละคนมีวิธีแก้ปัญหาของตัวเองและแต่ละคนก็มีข้อได้เปรียบและข้อเสียของตัวเอง
ที่นี่ฉันใช้เมธอด MessageFormat.format ใน java.text包ซึ่งสามารถจับคู่และแยกวิเคราะห์ข้อความเทมเพลตของเราได้อย่างง่ายดาย
เบื้องต้นเกี่ยวกับวิธีการ MessageFormat
MessageFormat ใช้ในการจัดรูปแบบข้อความโดยปกติจะเป็นสตริงเช่น:
string str = "ฉันไม่ใช่ {0} อายุคือ {1, number, short}, ความสูงคือ {2, number,#.#}";MessageFormat สามารถจัดรูปแบบข้อความดังกล่าวจากนั้นแทรกสตริงที่จัดรูปแบบลงในตำแหน่งที่เหมาะสมในรูปแบบเช่น:
แทนที่ {0} ใน str ด้วย "หมู", {1, ตัวเลข, สั้น} ด้วยหมายเลข 8 และ {2, หมายเลข,#.#} ด้วยหมายเลข 1.2
จากนั้นสิ่งที่ผู้ใช้จะได้รับคือสตริงที่จัดรูปแบบ "ฉันไม่ใช่หมูอายุ 8 ความสูงคือ 1.2"
MessageFormat นั้นไม่เกี่ยวข้องกับสถานที่ แต่กับโหมดที่ผู้ใช้ให้กับ MessageFormat และรูปแบบ subformat สำหรับพารามิเตอร์ที่แทรกเพื่อสร้างข้อความที่เหมาะสมสำหรับสถานที่ต่าง ๆ
โหมด MessageFormat (ส่วนหลัก):
Formatelement:
{ArgumentIndex}
{ArgumentIndex, FormatType}
{ArgumentIndex, FormatType, FormatStyle}
FormatType:
ตัวเลข
วันที่
เวลา
ตัวเลือก (ต้องใช้ตัวเลือกรูปแบบ)
FormatStyle:
สั้น
ปานกลาง
ยาว
เต็ม
จำนวนเต็ม
สกุลเงิน
เปอร์เซ็นต์
subformatpattern
ใช้ STR เป็นตัวอย่างในสตริงนี้:
1. {0} และ {1, number, short} และ {2, number,#.#}; ทั้งสองเป็นของ Formatelement, 0,1,2 เป็น ArgumentIndex
2. จำนวนใน {1, number, short} เป็นของ formatType ในขณะที่สั้นเป็นของ formatStyle
3.#.#in {1, number,#.#} เป็นของโหมด subformat
การระบุ formatType และ formatStyle คือการสร้างค่ารูปแบบวันที่จำนวนของความแม่นยำที่แตกต่างกันประเภทเปอร์เซ็นต์ ฯลฯ
ตัวอย่าง:
1. อาร์กิวเมนต์จะต้องเป็นจำนวนเต็มที่ไม่เป็นลบ จำนวนของมันไม่ จำกัด เพียง 10 จาก 0 ถึง 9 มันสามารถประกอบด้วยตัวเลขตั้งแต่ 0 ถึง 9 ดังนั้นอาจมีได้มากมายเช่น:
String pig = "{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15}} {16}"; Object [] {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า); ผลลัพธ์สุดท้ายคือ: ABCDEFGHIJKLMNOPQ
2. เมื่อจัดรูปแบบสตริงเพียงสองคำพูดเดียวแสดงถึงคำพูดเดียวและคำพูดเดียวเดียวจะถูกละเว้นเช่น:
สตริงข้อความ = "โอ้ {0} คือ 'a' หมู"; Object [] array = วัตถุใหม่ [] {"Zhangsan"}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า); ผลลัพธ์ที่ได้คือ: oh, ZhangSan is a pig
เพิ่มคำพูดเดียวในตัวอักษร A เช่น:
String message = "OH, {0} คือ '' A '' Pig"; Object [] array = วัตถุใหม่ [] {"Zhangsan"}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า); ผลลัพธ์ที่ได้คือ: oh, ZhangSan is 'a' pig
3. คำพูดเดียวจะเก็บอักขระหรือสตริงของแท้
ดังนั้นหากไม่มีข้อกำหนดพิเศษคำพูดเดียวจะต้องถูกลบออกก่อนการจัดรูปแบบอย่างเป็นทางการมิฉะนั้นปัญหาที่ไม่จำเป็นจะเกิดขึ้นเช่น:
String message = "โอ้ '{0}' เป็นหมู"; Object [] array = วัตถุใหม่ [] {"Zhangsan"}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า);ผลลัพธ์สุดท้ายคือ: โอ้ {0} คือ 'A' หมูจางไม่สามารถแสดงได้ที่นี่
ตัวอย่างเช่นการใช้รูปแบบ subformat มีคำพูดเพิ่มเติมเดียว:
String message = "โอ้, '{0, number,#.#} เป็นหมู"; วัตถุ [] array = วัตถุใหม่ [] {ใหม่สองครั้ง (3.1415)}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า); ผลลัพธ์สุดท้ายคือ: oh, {0,number,#.#} is 'a' pig。
ถ้าเป็นเช่นนี้ก็สามารถแสดงได้อย่างถูกต้อง
String message = "โอ้ {0, number,#.#} เป็นหมู"; วัตถุ [] array = วัตถุใหม่ [] {ใหม่สองครั้ง (3.1415)}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า); ผลลัพธ์ที่ได้คือ: oh, 3.1 is a pig
3. ไม่ว่าจะเป็นสตริงที่ยกมาหรือสตริงที่ไม่ได้ยกไว้รั้งหยิกซ้ายไม่รองรับ แต่รองรับรั้งหยิกที่ถูกต้องเช่น::
String message = "โอ้ {เป็นหมู"; Object [] array = วัตถุใหม่ [] {"Zhangsan"}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า); ผลลัพธ์สุดท้ายคือ:异常java.lang.IllegalArgumentException: Unmatched braces in the pattern
รั้งที่เหมาะสมสามารถแสดงได้เช่น:
String message = "OH,} เป็นหมู"; Object [] array = วัตถุใหม่ [] {"Zhangsan"}; ค่าสตริง = messageFormat.format (ข้อความ, อาร์เรย์); System.out.println (ค่า); ผลลัพธ์สุดท้ายคือ: oh, } is a pig
เกี่ยวกับ MessageFormat.format วิธี:
ทุกครั้งที่มีการเรียกใช้เมธอด MessageFormat.format อินสแตนซ์ของ MessageFormat จะถูกสร้างขึ้นซึ่งเทียบเท่ากับ MessageFormat นั้นจะใช้เพียงครั้งเดียว วิธีการจัดรูปแบบของคลาส MessageFormat มีดังนี้:
รูปแบบสตริงคงที่สาธารณะ (รูปแบบสตริงวัตถุ ... อาร์กิวเมนต์) {MessageFormat temp = new MessageFormat (รูปแบบ); return temp.format (อาร์กิวเมนต์); -หากคุณต้องการใช้อินสแตนซ์ MessageFormat ซ้ำคุณสามารถใช้วิธีการต่อไปนี้:
ข้อความสตริง = "โอ้ {0} เป็นหมู"; MessageFormat MessageFormat = new MessageFormat (ข้อความ); Object [] array = วัตถุใหม่ [] {"Zhangsan"}; ค่าสตริง = messageFormat.format (อาร์เรย์); System.out.println (ค่า); ผลลัพธ์ที่ได้คือ: oh, ZhangSan is a pig
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น