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());
此类设计用作简易替换为StringBuffer在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer ,因为它在大多数实现中将更快。
StringBuilder主要的方法包括append,insert方法
StringBuilder不能安全的使用多线程,如果需要同步,建议使用StringBuffer。
//构造方法 Locale(String language) Locale(String language,String country) //通过静态方法创建locale getDefault()
国际化的实现核心在于显示的语言上,通常的做法是将其定义成若干个属性文件(文件的后缀是.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}