Java.text包深度解析:格式化与国际化文本处理详解
Java.text包是Java核心库中处理文本、日期、数字和消息的重要模块。本文全面解析该包的核心类和使用方法,通过详细的代码示例展示日期时间格式化、数字格式化、消息模板、字符串排序和文本边界分析等实用功能,帮助开发者快速掌握国际化应用的文本处理技术,提升开发效率和应用质量。
java.text 包提供了处理文本、日期、数字和消息的类和接口,用于实现与语言无关的文本处理功能。
主要类概览
1. 格式化类
1、DateFormat - 日期/时间格式化
2、NumberFormat - 数字格式化
3、MessageFormat - 消息格式化
4、SimpleDateFormat - 自定义日期格式
5、DecimalFormat - 自定义数字格式
2. 文本处理类
1、Collator - 字符串比较和排序
2、BreakIterator - 文本边界分析
示例代码
1. NumberFormat - 数字格式化
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class NumberFormatExample {
public static void main(String[] args) {
double number = 12345.6789;
// 获取默认格式
NumberFormat defaultFormat = NumberFormat.getInstance();
System.out.println("默认格式: " + defaultFormat.format(number));
// 获取货币格式
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
System.out.println("货币格式: " + currencyFormat.format(number));
// 获取百分比格式
NumberFormat percentFormat = NumberFormat.getPercentInstance();
percentFormat.setMinimumFractionDigits(2);
System.out.println("百分比格式: " + percentFormat.format(0.8567));
// 特定地区的格式
NumberFormat frenchFormat = NumberFormat.getInstance(Locale.FRENCH);
System.out.println("法语格式: " + frenchFormat.format(number));
// 解析字符串为数字
try {
String numStr = "12,345.679";
Number parsedNumber = defaultFormat.parse(numStr);
System.out.println("解析结果: " + parsedNumber.doubleValue());
} catch (ParseException e) {
e.printStackTrace();
}
}
}2. DateFormat - 日期格式化
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.Locale;
public class DateFormatExample {
public static void main(String[] args) {
Date now = new Date();
// 不同风格的日期格式
DateFormat shortFormat = DateFormat.getDateInstance(DateFormat.SHORT);
DateFormat mediumFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG);
DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL);
System.out.println("短格式: " + shortFormat.format(now));
System.out.println("中格式: " + mediumFormat.format(now));
System.out.println("长格式: " + longFormat.format(now));
System.out.println("完整格式: " + fullFormat.format(now));
// 日期时间格式
DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM, DateFormat.MEDIUM);
System.out.println("日期时间: " + dateTimeFormat.format(now));
// 特定地区的格式
DateFormat chineseFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);
System.out.println("中文格式: " + chineseFormat.format(now));
// 解析日期字符串
try {
String dateStr = "2023-12-25";
DateFormat parser = DateFormat.getDateInstance();
Date parsedDate = parser.parse(dateStr);
System.out.println("解析的日期: " + parsedDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}3. SimpleDateFormat - 自定义日期格式
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatExample {
public static void main(String[] args) {
Date now = new Date();
// 自定义格式
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("格式1: " + sdf1.format(now));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 EEEE");
System.out.println("格式2: " + sdf2.format(now));
SimpleDateFormat sdf3 = new SimpleDateFormat("hh:mm a");
System.out.println("格式3: " + sdf3.format(now));
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
System.out.println("格式4: " + sdf4.format(now));
}
}4. DecimalFormat - 自定义数字格式
import java.text.DecimalFormat;
public class DecimalFormatExample {
public static void main(String[] args) {
double number = 1234.56789;
// 各种数字格式模式
DecimalFormat df1 = new DecimalFormat("#,##0.00");
System.out.println("千分位: " + df1.format(number));
DecimalFormat df2 = new DecimalFormat("00000.000");
System.out.println("固定位数: " + df2.format(number));
DecimalFormat df3 = new DecimalFormat("###,##0.###");
System.out.println("灵活格式: " + df3.format(number));
DecimalFormat df4 = new DecimalFormat("0.00E0");
System.out.println("科学计数: " + df4.format(number));
// 百分比格式
DecimalFormat df5 = new DecimalFormat("0.00%");
System.out.println("百分比: " + df5.format(0.8567));
// 货币格式
DecimalFormat df6 = new DecimalFormat("¤#,##0.00");
System.out.println("货币: " + df6.format(number));
}
}5. MessageFormat - 消息格式化
import java.text.MessageFormat;
import java.util.Date;
public class MessageFormatExample {
public static void main(String[] args) {
// 基本消息格式化
String pattern = "你好,{0}!今天是{1},你的账户余额是{2,number,currency}。";
Object[] arguments = {"张三", new Date(), 12345.67};
String message = MessageFormat.format(pattern, arguments);
System.out.println(message);
// 复杂格式
pattern = "用户{0}在{1,date,long} {1,time,short}登录,这是第{2,number,integer}次登录。";
Object[] args2 = {"李四", new Date(), 156};
message = MessageFormat.format(pattern, args2);
System.out.println(message);
// 选择格式
pattern = "有{0,choice,0#没有文件|1#1个文件|1<{0,number,integer}个文件}。";
System.out.println(MessageFormat.format(pattern, 0));
System.out.println(MessageFormat.format(pattern, 1));
System.out.println(MessageFormat.format(pattern, 5));
}
}6. Collator - 字符串排序
import java.text.Collator;
import java.util.Arrays;
import java.util.Locale;
public class CollatorExample {
public static void main(String[] args) {
String[] names = {"张三", "李四", "王五", "赵六", "刘七"};
// 使用中文排序规则
Collator collator = Collator.getInstance(Locale.CHINA);
System.out.println("排序前:");
for (String name : names) {
System.out.println(name);
}
Arrays.sort(names, collator);
System.out.println("\n排序后:");
for (String name : names) {
System.out.println(name);
}
// 字符串比较
String str1 = "北京";
String str2 = "上海";
int result = collator.compare(str1, str2);
System.out.println("\n比较结果: " + str1 + " vs " + str2 + " = " + result);
}
}7. BreakIterator - 文本边界分析
import java.text.BreakIterator;
import java.util.Locale;
public class BreakIteratorExample {
public static void main(String[] args) {
String text = "这是一个示例文本。用于演示BreakIterator的功能。Hello World!";
// 字符边界
System.out.println("=== 字符边界 ===");
BreakIterator charIterator = BreakIterator.getCharacterInstance(Locale.CHINA);
charIterator.setText(text);
int charStart = charIterator.first();
while (charStart != BreakIterator.DONE) {
int charEnd = charIterator.next();
if (charEnd != BreakIterator.DONE) {
System.out.println("字符: " + text.substring(charStart, charEnd));
charStart = charEnd;
} else {
break;
}
}
// 单词边界
System.out.println("\n=== 单词边界 ===");
BreakIterator wordIterator = BreakIterator.getWordInstance(Locale.CHINA);
wordIterator.setText(text);
int wordStart = wordIterator.first();
while (wordStart != BreakIterator.DONE) {
int wordEnd = wordIterator.next();
if (wordEnd != BreakIterator.DONE) {
String word = text.substring(wordStart, wordEnd);
if (!word.trim().isEmpty()) {
System.out.println("单词: " + word);
}
wordStart = wordEnd;
} else {
break;
}
}
// 句子边界
System.out.println("\n=== 句子边界 ===");
BreakIterator sentenceIterator = BreakIterator.getSentenceInstance(Locale.CHINA);
sentenceIterator.setText(text);
int sentenceStart = sentenceIterator.first();
while (sentenceStart != BreakIterator.DONE) {
int sentenceEnd = sentenceIterator.next();
if (sentenceEnd != BreakIterator.DONE) {
System.out.println("句子: " + text.substring(sentenceStart, sentenceEnd));
sentenceStart = sentenceEnd;
} else {
break;
}
}
}
}总结
java.text 包提供了强大的文本处理能力,主要特点包括:
1、国际化支持 - 支持不同语言和地区的格式规则
2、格式化功能 - 数字、日期、消息的格式化和解析
3、文本分析 - 字符、单词、句子边界的识别
4、排序比较 - 基于特定语言的字符串排序
这些类在处理用户界面、数据展示、国际化应用等方面非常有用,能够帮助开发者创建更加用户友好的应用程序。
最后更新于3月前
本文由人工编写,AI优化,转载请注明原文地址: Java.text包完整使用指南:日期数字格式化与文本处理实战
推荐阅读
评论 (1)
发表评论
昵称:加载中...
大雄David2025-11-13 18:22:59
很实用的Java.text包指南!示例代码对我处理数字格式化帮助很大,特别是多语言 locale 的部分。感谢作者的整理和分享!