use StringBuilder instead of StringBuffer