StringBuffer类
StringBuffer目的是来解决字符串相加时带来的性能问题(常量与变量)
StringBuffer的内部实现采用字符数组,默认数组长度为16,超过数组大小时,动态扩充的算法为 原长*2+2;
String s1 = "a";
String s2 = "b";
StringBuffer sb = new StringBuffer();
sb.append(s1).sppend(s2).append(1);
System.out.println(sb.toString());
StringBuilder类
此类设计用作简易替换为StringBuffer在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer ,因为它在大多数实现中将更快。
StringBuilder主要的方法包括append,insert方法
StringBuilder不能安全的使用多线程,如果需要同步,建议使用StringBuffer。
程序国际化
Locale类
//构造方法
Locale(String language)
Locale(String language,String country)
//通过静态方法创建locale
getDefault()
ResourceBundle类
国际化的实现核心在于显示的语言上,通常的做法是将其定义成若干个属性文件(文件的后缀是.properties),属性文件中的格式采用 “key=value” 的格式进行操作
getBundle(String baseName)
getBundle(String baseName,Locale locale)
getString(String key)
处理动态文本
如果想要打印这样的信息 "欢迎你,XXX!" 具体的名字不是固定的,那么就要使用动态文本进行程序的处理。
进行动态的文本处理,必须使用java.text.MessageFormat类完成
实例
public class Demo01 {
public static void main(String[] args) {
//创建一个本地语言环境对象,该对象会根据参数设置来自动选择语言环境
Locale locale_CN = new Locale("zh","CN");
Locale locale_US = new Locale("en","US");
//获取当前系统默认的语言环境
Locale locale_default = Locale.getDefault();
Scanner input = new Scanner(System.in);
//用于绑定属性文件的工具类(参数:属性文件的基本名)
ResourceBundle r = ResourceBundle.getBundle("com.Akira.I18N.info",locale_US);
System.out.println(r.getString("system.name"));
System.out.println(r.getString("input.username"));
String username = input.nextLine();
System.out.println(r.getString("input.password"));
String password = input.nextLine();
if("admin".equals(username) && "123".equals(password)){
System.out.println(r.getString("login.success"));
String welcome = r.getString("welcome");
//动态文本格式化
welcome = MessageFormat.format(welcome,username);
System.out.println(welcome);
}else{
System.out.println(r.getString("login.error"));
}
}
}
//info_en_US.properties
system.name =EMP Manager System
input.username =Input UserName
input.password =Input PassWord
login.success =Login Success!
login.error = Login Error
welcome = welcome,{0}