Posts Tagged ‘ MessageFormat

[Java]MessageFormat : insert values between single quotes

หลังจากได้แนะนำการใช้ การจัด Format Message ก็ใช้งานมาเรื่อยจนวันนี้ ติดปัญหาเล็กน้อยในการ ใช้ MessageFormat สำหรับ format ข้อความที่มีเครื่องหมาย ” (single quotes) เนื่องจากหลังจาก format แล้วเครื่องหมาย ” จะหายไปโดยปริยาย เช่น

String msg = "Hi, '{0}' this is {1}";
String val = MessageFormat.format(msg, "test", "xx");
System.out.println(val);

ข้อความที่ได้จะกลายเป็น Hi, test this is xx
ด้วยความช่วยเหลือจาก อ.google ก็พบวิธีแก้ไขดังนี้

String msg = "Hi, ''{0}'' this is {1}";
String val = MessageFormat.format(msg, "test", "xx");
System.out.println(val);

โดยการเพิ่ม ” ครอบ ” อีกทีหนึ่ง

ลอกมาจาก
Java MessageFormat – How can I insert values between single quotes?

การจัด Format Message

เป็นรูปแบบการ Format ข้อความโดยใส่ Parameter ไปให้กับตำแหน่งที่เราต้องการ เช่น ผมมีข้อความ ที่เก็บดังนี้

The job name {0} was started on {1}.

หรือ

Deleted data {0} successfully.

ยอมรับเลยครับว่าผมเคยใช้ รูปแบบ ในการแทนที่ตำแหน่งที่ต้องการประมาณนี้ (ไปอยู่ที่ไหนมาไม่รู้ถึงได้เขียนแบบนี้)

String patter = "The job name {0} was started on {1}.";
patter = patter.replaceFirst("\\{0}", "Test Job Name");
patter = patter.replaceFirst("\\{1}", new Date().toString());

พอดีวันนี้ รื้อ Code เดิมๆมาแก้ไข และหาวิธีก็เลยเจอการ Format Message ในรูปแบบที่กล่าวมาโดยใช้รูปแบบดังนี้ครับ

/**
 * File Name : FormatMessage.java
 * Created Date : Dec 23, 2009 : 4:50:36 PM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.example;

import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;

/**
 * @Author Supot Saelao
 * @Version 1.0
 */
public class FormatMessage {
	public static void main(String[] args) {
		String pattern = "The job name {0} was started on {1}.";
		String msg = "";
		Date toDate = new Date();

		// Format using locale
		MessageFormat formatter = new MessageFormat(pattern);
		Object[] arguments = { "Test Job Name", toDate };
		formatter.setLocale(new Locale("th", "TH"));
		msg = formatter.format(arguments);
		System.out.println("Locale message : " + msg);

		// Format standard
		Object[] params = new Object[] { "Test Job Name", toDate };
		msg = MessageFormat.format(pattern, params);
		System.out.println("Standard message : " + msg);
	}
}

ผลที่ได้ก็ประมาณนี้ครับ

Locale message : The job name Test Job Name was started on 23/12/2552, 17:06 น..
Standard message : The job name Test Job Name was started on 12/23/09 5:06 PM.

จากตัวอย่างเป็นวิธีการที่ง่ายที่สุดแล้วครับ นอกจากนี้ยังมีรูปแบบ Format อีกมากครับ
อ้างอิง
Class MessageFormat