第03章(常用工具类)
1 /***************** 2 ***第三章常用工具类 3 *******知识点: 4 **************1.系统相关 5 ******************1.1 System类 6 ******************1.2 Runtime类 7 ******************1.3 输入类 8 **************************1.3.1 Scanner类 9 **************************1.3.2 BufferedReader类 10 **************2.数字相关 11 ******************2.1 整型 12 **************************2.1.1 Byte 类 13 **************************2.1.2 Short类 14 **************************2.1.3 Integer类 15 **************************2.1.4 Long类 16 ******************2.2 浮点型 17 **************************2.2.1 Float类 18 **************************2.2.2 Double类 19 ******************2.3 字符型 20 **************************2.3.1 Character类 21 ******************2.4 布尔型 22 **************************2.4.1 Boolean类 23 ******************2.5 数学类 24 **************************2.5.1 Math类 25 **************************2.5.2 StrictMath类 26 ******************2.6 工具类 27 **************************2.6.1 Random类 28 **************************2.6.2 BigDecimal类 29 **************************2.6.3 正则表达式 30 **************3.日期相关 31 ******************3.1 Date类 32 ******************3.2 Calendar类 33 ******************3.3 GregorianCalendar类 34 ******************3.4 DateFormat类 35 ******************3.5 SimpleDateFormat类 36 ******************3.6 TimeZone类 37 **************4.字符串相关 38 ******************4.1 String类 39 ******************4.2 StringBuilder类 40 ******************4.3 StringBuffer类 41 */ 42 import java.lang.*; //导入相关包 43 import java.util.*; 44 import java.util.regex.*; 45 import java.math.*; 46 import java.text.*; 47 48 public class test3{ 49 public static void main(String[] args) throws Exception { 50 showDemo("1.系统相关"); 51 demoSystem();//演示系统相关 52 53 showDemo("2.数字相关"); 54 demoNumber();//演示数字相关 55 56 showDemo("3.日期相关"); 57 demoDate();//演示日期相关 58 59 showDemo("4.字符串相关"); 60 demoString();//演示字符串相关 61 } 62 63 /* 64 * 抽取打印演示函数 用于打印演示功能提示 65 */ 66 public static void showDemo(String demoStr){ 67 System.out.println("演示:" + demoStr); 68 } 69 70 /* 71 * 抽取日期打印函数 用于显示日期打印 72 */ 73 public static void showDate(String str,Calendar c_Calendar){ 74 System.out.println("当前时区是:" + c_Calendar.getTimeZone().getDisplayName() + " " 75 + c_Calendar.getTimeZone().getID() + " " 76 + c_Calendar.getTimeZone().getRawOffset() + " " 77 + "\r\n" + str +":" 78 + c_Calendar.get(Calendar.YEAR) + "年" 79 + (c_Calendar.get(Calendar.MONTH)+1) + "月" //注意加不然少1个月 80 + (c_Calendar.get(Calendar.DATE )) + "日" 81 + c_Calendar.get(Calendar.HOUR_OF_DAY) + "时" 82 + c_Calendar.get(Calendar.MINUTE) + "分" 83 ); 84 } 85 86 87 /***************1.系统相关 88 ******************1.1 System类 89 ******************1.2 Runtime类 90 ******************1.3 输入类 91 **************************1.3.1 Scanner类 92 **************************1.3.2 BufferedReader类 93 */ 94 public static void demoSystem() throws Exception { 95 /**1.1 System类**/ 96 /*char c_a = (char)(System.in.read()); //获取控制台输入字符 97 System.out.println("获取键盘输入为:" + c_a);*/ 98 Date d_d = new Date(System.currentTimeMillis()); 99 System.out.println("当前时间(Long类型 没转化前)为:" + System.currentTimeMillis()); //获取当前时间(精确到毫秒) 返回long 100 System.out.println("当前时间(转化后)为:" + d_d.toString()); //获取当前时间 返回日期时间 101 System.out.println("当前用户是:" + System.getProperty("user.name")); //获取系统当前用户名 102 System.out.println("当前用户是:" + System.getProperty("os.name")); //获取当前操作系统名 103 104 /**1.2 Runtime类**/ 105 //1.2.1 获取虚拟机信息 106 Runtime r_a = Runtime.getRuntime(); 107 System.out.println("当前虚拟机的运行内存为:" + r_a.totalMemory());//获取虚拟机当前内存 108 109 //1.2.2 调用windows程序并执行 110 //Process p_a = r_a.exec("notepad"); //调用windows文本编辑器 111 //p_a.waitFor(); //设置程序为等待 112 //System.out.println("程序返回值:" + p_a.exitValue());//获取调用程序返回值 没错误返回0 其他非0 113 114 /******************1.3 输入类 115 **************************1.3.1 Scanner类 116 **************************1.3.2 BufferedReader类 117 */ 118 119 /*********1.3.1 Scanner类**********/ 120 //1.3.1.1获取屏幕输入数据 121 Scanner scan = null; 122 //scan = new Scanner(System.in); 123 //System.out.print("请输入字符:"); 124 //while(true){ 125 // String str = scan.nextLine(); 126 // if(str.equals(":q")) break; 127 // System.out.println("输入字符为:" + str); 128 // str = ""; 129 // str = null ; 130 //} 131 132 //1.3.1.2 构造字符串 133 //scan = new Scanner("123 andw, sd weddw dasd; d asdadsa| sdad& ~sdadsad");//默认使用空格来转换 134 //while(scan.hasNext()){ 135 // System.out.println("构造字符串:" + scan.next()); 136 //} 137 138 /*********1.3.2 BufferedReader类**********/ 139 //更多时候用于读取文件 文件章节再详细介绍 140 } 141 142 143 /***************2.数字相关 144 ******************2.1 整型 145 **************************2.1.1 Byte 类 146 **************************2.1.2 Short类 147 **************************2.1.3 Integer类 148 **************************2.1.4 Long类 149 ******************2.2 浮点型 150 **************************2.2.1 Float类 151 **************************2.2.2 Double类 152 ******************2.3 字符型 153 **************************2.3.1 Character类 154 ******************2.4 布尔型 155 **************************2.4.1 Boolean类 156 ******************2.5 数学类 157 **************************2.5.1 Math类 158 **************************2.5.2 StrictMath类 159 ******************2.6 工具类 160 **************************2.6.1 Random类 161 **************************2.6.2 BigDecimal类 162 **************************2.6.3 正则表达式 163 */ 164 public static void demoNumber(){ 165 /**2.1 整型**/ 166 //2.1.1 Byte 类 167 byte b_a,b_b; 168 String b_str = "126"; 169 b_a = 127 ; 170 171 Byte b_Byte_1 = new Byte(b_a); //通过byte类型初始化 注意new时候必须初始化 172 b_b = b_Byte_1.byteValue(); //赋值 173 System.out.println("调用byteValue(byte)方法后b_b值为:" + b_b); 174 175 b_Byte_1 = new Byte(b_str);//通过string类型初始化 176 b_b = b_Byte_1.byteValue();//赋值 177 System.out.println("调用byteValue(string)方法后b_b值为:" + b_b); 178 179 b_b = b_Byte_1.parseByte("125");//调用parseByte(string)方法 参数string类型 180 System.out.println("调用parseByte(string)方法后b_b值为:" + b_b); 181 182 b_b = b_Byte_1.parseByte("124",10);//调用parseByte(string,int)方法 参数string类型,10表示进制 183 System.out.println("调用parseByte(string,int)方法后b_b值为:" + b_b); 184 185 Byte b_Byte_2 = b_Byte_1.valueOf((byte)123);//调用valueOf(byte)方法 参数byte类型 186 System.out.println("调用valueOf(byte)方法后b_Byte_2值为:" +b_Byte_2.byteValue()); 187 188 b_Byte_2 = b_Byte_1.valueOf("122");//调用valueOf(string)方法 参数string类型 189 System.out.println("调用valueOf(string)方法后b_Byte_2值为:" +b_Byte_2.byteValue()); 190 191 b_Byte_2 = b_Byte_1.valueOf("122",8);//调用valueOf(string,int)方法 参数string类型 8表示进制 192 System.out.println("调用valueOf(string,int)方法后b_Byte_2值为:" +b_Byte_2.byteValue()); 193 System.out.println("调用toString()方法后b_Byte_2值为:" +b_Byte_2.toString()); 194 //注意跟byteValue()方法区别 一个返回是string类型 一个返回是byte类型 195 196 System.out.println("Byte类型的最大值为:" + Byte.MAX_VALUE);//获取最大值 197 System.out.println("Byte类型的最小值为:" + Byte.MIN_VALUE);//获取最小值 198 System.out.println("Byte类型的二进制位数为:" + Byte.SIZE + " 占用字节数:" + Byte.SIZE/8 );//获取位数 199 200 //2.1.2 Short类 201 short s_a = 1024 ; 202 Short s_Short = new Short(s_a); 203 System.out.println("Short类型的最大值为:" + Short.MAX_VALUE);//获取最大值 204 System.out.println("Short类型的最小值为:" + Short.MIN_VALUE);//获取最小值 205 System.out.println("Short类型的二进制位数为:" + Short.SIZE + " 占用字节数:" + Short.SIZE/8 );//获取位数 206 //用法跟Byte类型 这里就不再细述了 用到时查看相关API即可 207 208 //2.1.3 Integer类 209 int i_a = 1025 ; 210 Integer i_Integer = new Integer(i_a); 211 System.out.println("Integer类型的最大值为:" + Integer.MAX_VALUE);//获取最大值 212 System.out.println("Integer类型的最小值为:" + Integer.MIN_VALUE);//获取最小值 213 System.out.println("Integer类型的二进制位数为:" + Integer.SIZE + " 占用字节数:" + Integer.SIZE/8);//获取位数 214 //用法跟Byte类型 这里就不再细述了 用到时查看相关API即可 215 216 //2.1.4 Long类 217 long l_a = 1026L; 218 Long l_Long = new Long(l_a); 219 System.out.println("Long类型的最大值为:" + Long.MAX_VALUE);//获取最大值 220 System.out.println("Long类型的最小值为:" + Long.MIN_VALUE);//获取最小值 221 System.out.println("Long类型的二进制位数为:" + Long.SIZE + " 占用字节数:" + Long.SIZE/8);//获取位数 222 //用法跟Byte类型 这里就不再细述了 用到时查看相关API即可 223 224 /**2.2 浮点型**/ 225 //2.2.1 Float类 226 float f_a; 227 String s_Float_str_1 = "1.51"; 228 Float f_Float_1 = new Float(s_Float_str_1); 229 System.out.println("f_Float_1是否为一个非数字值:" + f_Float_1.isNaN()); 230 System.out.println("调用byteValue()方法:" + f_Float_1.byteValue());//注意强转后结果可能发生变化 231 f_a = f_Float_1.intValue(); 232 233 System.out.println("f_a值为:" + f_a); 234 235 System.out.println("Float类型的最大值为:" + Float.MAX_VALUE);//获取最大值 236 System.out.println("Float类型的最小值为:" + Float.MIN_VALUE);//获取最小值 237 System.out.println("Float类型的二进制位数为:" + Float.SIZE + " 占用字节数:" + Float.SIZE/8);//获取位数 238 //用法跟Byte类型 这里就不再细述了 用到时查看相关API即可 239 240 //2.2.2 Double类 241 double d_d = 0.15; 242 Double d_Double = new Double(d_d); 243 System.out.println("Double类型的最大值为:" + Double.MAX_VALUE);//获取最大值 244 System.out.println("Double类型的最小值为:" + Double.MIN_VALUE);//获取最小值 245 System.out.println("Double类型的二进制位数为:" + Double.SIZE + " 占用字节数:" + Double.SIZE/8);//获取位数 246 //用法跟Byte类型 这里就不再细述了 用到时查看相关API即可 247 248 /**2.3 字符型**/ 249 //2.3.1 Character类 250 char c_a,c_b,c_c; 251 c_a = 'a'; 252 c_b = (char)((int)c_a - 32) ;//A大写 大写编码比小写小32 253 c_c = '3'; 254 System.out.println(c_a + " 是否为字母:" + Character.isLetter(c_a)); 255 System.out.println(c_a + " 是否为小写字母:" + Character.isLowerCase(c_a)); 256 System.out.println(c_b + " 是否为大写字母:" + Character.isUpperCase(c_b)); 257 System.out.println(c_c + " 是否为数字:" + Character.isDigit(c_c)); 258 259 /**2.4 布尔型**/ 260 //2.4.1 Boolean类 261 boolean b_boolean = false; 262 String b_boolean_str = "True"; 263 Boolean b_Boolean = new Boolean(b_boolean); 264 System.out.println("b_Boolean值为:" + b_Boolean.booleanValue()); 265 266 b_Boolean = new Boolean(b_boolean_str);//对参数 忽略大小写 267 System.out.println("b_Boolean值为:" + b_Boolean.booleanValue()); 268 System.out.println("调用valueOf()方法为:" + b_Boolean.valueOf("sdadasdsa")); 269 System.out.println("调用valueOf()方法为:" + b_Boolean.valueOf("TRUE"));//不区分大小写 270 System.out.println("调用valueOf()方法为:" + b_Boolean.valueOf("true"));//不区分大小写 271 272 /**2.5 数学类**/ 273 //2.5.1 Math类() 274 System.out.println("求绝对值函数abs():" + Math.abs(-1.2)); 275 System.out.println("求三角余弦函数cos():" + Math.cos(60)); 276 System.out.println("求三角正弦函数sin():" + Math.sin(30)); 277 System.out.println("求三角正切函数sin():" + Math.tan(45)); 278 System.out.println("求平方根函数sqrt():" + Math.sqrt(16)); 279 System.out.println("求最大值max():" + Math.max(16,19)); 280 System.out.println("求最小值min():" + Math.min(-1,-2)); 281 System.out.println("求随机数random():" + Math.random()); 282 //更多使用见API文档 283 //2.5.2 StrictMath类 284 System.out.println("求绝对值函数abs():" + StrictMath.abs(-1.2)); 285 System.out.println("求三角余弦函数cos():" + StrictMath.cos(60)); 286 System.out.println("求三角正弦函数sin():" + StrictMath.sin(30)); 287 System.out.println("求三角正切函数sin():" + StrictMath.tan(45)); 288 System.out.println("求平方根函数sqrt():" + StrictMath.sqrt(16)); 289 System.out.println("求最大值max():" + StrictMath.max(16,19)); 290 System.out.println("求最小值min():" + StrictMath.min(-1,-2)); 291 System.out.println("求随机数random():" + StrictMath.random()); 292 //更多使用见API文档 293 294 // 需注意: Math运行效率高 StrictMath可以保障在不同的平台上运行都得到相同的结果 295 296 /**2.6 工具类**/ 297 //2.6.1 Random类 298 Random r_Random = new Random(); 299 int i_Random = r_Random.nextInt(10);//返回0...10之间的随机数(不含10) 300 System.out.println("随机数为:" + i_Random); 301 302 boolean b_Random = r_Random.nextBoolean();//随机返回 true /false 303 System.out.println("随机数为:" + b_Random); 304 305 float f_Random = r_Random.nextFloat(); 306 System.out.println("随机数为:" + f_Random); 307 308 double d_Random = r_Random.nextDouble();//跟nextFloat()方法返回位数不一致。需注意 309 System.out.println("随机数为:" + d_Random); 310 //通过上面对比这个类是然并卵 推荐使用 Math.random() 方法更加方便 311 312 //2.6.2 BigDecimal类 313 //四种格式化小数位数方法 314 double d_PI = Math.PI; 315 double d_BigDecimal = 1234.146; 316 System.out.println("PI为:" + d_PI); 317 318 //第一种格式化 转换最简单 319 System.out.println("第一种格式化:" + 320 new DecimalFormat("0.00").format(d_PI));//会自行四舍五入 321 322 //第二种格式化 打印最简单 323 System.out.println("第二种格式化"+ String.format("%.2f", d_BigDecimal));//会自行四舍五入 324 325 //第三种格式化 326 BigDecimal b_BigDecimal = new BigDecimal(d_BigDecimal); 327 d_BigDecimal = b_BigDecimal.setScale(2,BigDecimal.ROUND_CEILING).doubleValue(); 328 //setScale(int,RoundingMode) 其中int为取的位数,RoundingMode为取数模式。 329 //本次为正无穷大舍入模式 更多模式可查看API文档 330 System.out.println("第三种格式化"+ d_BigDecimal); 331 332 //第四种格式化 转化最灵活 333 NumberFormat n_NumberFormat = NumberFormat.getNumberInstance();//获取系统对数字格式的设置 334 n_NumberFormat.setMaximumFractionDigits(2);//设置为2为小数 335 System.out.println("第四种格式化" + n_NumberFormat.format(d_BigDecimal));//会自行四舍五入 一般采用1,000.00方式 336 337 338 //BigDecimal 四大基本运算使用 339 System.out.println("BigDecimal类相加:" + new BigDecimal(10).add(new BigDecimal(20)).toString()); 340 System.out.println("BigDecimal类相减:" + new BigDecimal(10).subtract(new BigDecimal(20)).toString()); 341 System.out.println("BigDecimal类相乘:" + new BigDecimal(10).multiply(new BigDecimal(20)).toString()); 342 System.out.println("BigDecimal类相除:" + new BigDecimal(10).divide(new BigDecimal(20)).toString()); 343 344 345 //2.6.3 正则表达式 346 //使用步骤:1.定义编译器对象 2.定义匹配器 3.做匹配 347 348 String regex = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)" 349 + "|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";//检验是否为邮箱正则表达式 350 351 Pattern p_Pattern = Pattern.compile(regex);//定义并初始化正则表达式编译器 352 String email1 = "lishi_hzj@foxmail.com"; 353 String email2 = "dadsdsadads"; 354 355 Matcher m_Matcher1 = p_Pattern.matcher(email1); //定义并初始化匹配器 356 Matcher m_Matcher2 = p_Pattern.matcher(email2); 357 358 System.out.println("匹配是否为邮箱地址:" + m_Matcher1.matches());//第一种 359 System.out.println("匹配是否为邮箱地址:" + m_Matcher2.matches()); 360 System.out.println("匹配是否为邮箱地址:" + p_Pattern.matches(regex,email1));//第二种调用方法 361 } 362 363 364 /***************3.日期相关 365 ******************3.1 Date类 366 ******************3.2 Calendar类 367 ******************3.3 GregorianCalendar类 368 ******************3.4 DateFormat类 369 ******************3.5 SimpleDateFormat类 370 ******************3.6 TimeZone类 371 */ 372 public static void demoDate(){ 373 /**3.1 Date类**/ 374 Date d_Date = new Date(System.currentTimeMillis()); 375 System.out.println("当前时间为:" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(d_Date)); 376 //该类已过时 不建议使用 建议使用Calendar代替 377 378 /**3.2 Calendar类**/ 379 Calendar c_Calendar = Calendar.getInstance(); 380 c_Calendar.setTimeInMillis(System.currentTimeMillis()); 381 showDate("当前时间",c_Calendar); 382 383 c_Calendar.add(Calendar.DATE ,-1); 384 showDate("昨天是",c_Calendar); 385 386 c_Calendar.add(Calendar.DATE,2); //因为前面-1了 387 showDate("明天是",c_Calendar); 388 389 c_Calendar.add(Calendar.DATE,-1); //因为前面+2了 390 391 c_Calendar.add(Calendar.MONTH,1); 392 showDate("一个月后是",c_Calendar); 393 394 c_Calendar.add(Calendar.MONTH,-1); //因为前面+1了 395 c_Calendar.add(Calendar.YEAR,1); 396 showDate("一年后是",c_Calendar); 397 398 /**3.3 GregorianCalendar类**/ 399 GregorianCalendar g_GregorianCalendar = new GregorianCalendar(); 400 System.out.println("是否为闰年:" + g_GregorianCalendar.isLeapYear(2012)); 401 402 /**3.4 DateFormat类**/ 403 DateFormat d_DateFormat1 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); 404 DateFormat d_DateFormat2 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); 405 DateFormat d_DateFormat3 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); 406 DateFormat d_DateFormat4 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); 407 408 System.out.println("DateFormat.SHORT:"+d_DateFormat1.format(d_Date)); 409 System.out.println("DateFormat.MEDIUM:"+d_DateFormat2.format(d_Date)); 410 System.out.println("DateFormat.LONG:"+d_DateFormat3.format(d_Date)); 411 System.out.println("DateFormat.FULL:"+d_DateFormat4.format(d_Date)); 412 413 /**3.5 SimpleDateFormat类**/ 414 SimpleDateFormat s_SimpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); 415 SimpleDateFormat s_SimpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 416 SimpleDateFormat s_SimpleDateFormat3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E "); 417 SimpleDateFormat s_SimpleDateFormat4 = new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区"); 418 System.out.println(s_SimpleDateFormat1.format(d_Date)); 419 System.out.println(s_SimpleDateFormat2.format(d_Date)); 420 System.out.println(s_SimpleDateFormat3.format(d_Date)); 421 System.out.println(s_SimpleDateFormat4.format(d_Date)); 422 423 /**3.6 TimeZone类**/ 424 TimeZone t_TimeZone = TimeZone.getDefault();//获取系统默认时区 425 System.out.println("系统默认时区:" + t_TimeZone.getTimeZone("GMT-8").getID());//获取时区ID 426 System.out.println("系统默认时区:" + t_TimeZone.getDisplayName());//获取时区名称 427 428 429 //总结:上诉几个类使用起来都不是非常方便。无论是从执行效率还是线程安全上来说都不是最好的选择。 430 //建议推荐第三方库类 Joda-Time类库 431 } 432 433 /**************4.字符串相关 434 ******************4.1 String类 435 ******************4.2 StringBuilder类 436 ******************4.3 StringBuffer类 437 */ 438 public static void demoString(){ 439 /**4.1 String类**/ 440 System.out.println("======操作相同字符串======"); 441 int time = 50000; 442 String s=""; 443 long begin = System.currentTimeMillis(); 444 for(int i=0;i < time; i++){ 445 s += "java"; 446 } 447 long end = System.currentTimeMillis(); 448 System.out.println("操作相同字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 449 450 /**4.2 StringBuilder类**/ 451 StringBuilder sb =new StringBuilder(); 452 begin = System.currentTimeMillis(); 453 for(int i=0;i < time; i++){ 454 sb.append("java"); 455 } 456 end = System.currentTimeMillis(); 457 System.out.println("操作相同字符串" + sb.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 458 459 /**4.3 StringBuffer类**/ 460 StringBuffer sb_buf =new StringBuffer(); 461 begin = System.currentTimeMillis(); 462 for(int i=0;i < time; i++){ 463 sb_buf.append("java"); 464 } 465 end = System.currentTimeMillis(); 466 System.out.println("操作相同字符串" + sb_buf.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 467 468 s = ""; 469 sb.delete(0,sb.length()); 470 sb_buf.delete(0,sb_buf.length()); 471 472 473 System.out.println("======操作不同字符串======"); 474 begin = System.currentTimeMillis(); 475 for(int i=0;i < time; i++){ 476 s += "java" + String.valueOf(i); 477 } 478 end = System.currentTimeMillis(); 479 System.out.println("操作不同字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 480 481 begin = System.currentTimeMillis(); 482 for(int i=0;i < time; i++){ 483 sb.append("java" + String.valueOf(i)); 484 } 485 end = System.currentTimeMillis(); 486 System.out.println("操作不同字符串" + sb.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 487 488 begin = System.currentTimeMillis(); 489 for(int i=0;i < time; i++){ 490 sb_buf.append("java" + String.valueOf(i)); 491 } 492 end = System.currentTimeMillis(); 493 System.out.println("操作不同字符串" + sb_buf.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 494 495 496 System.out.println("======String效率问题======"); 497 begin = System.currentTimeMillis(); 498 s += "I" + "love" + "java"; 499 end = System.currentTimeMillis(); 500 System.out.println("使用+=操作字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 501 502 begin = System.currentTimeMillis(); 503 s = s + "I" + "love" + "java"; 504 end = System.currentTimeMillis(); 505 System.out.println("使用= +操作字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒"); 506 507 //其他基本操作自行查看API(如:连接、查找、替换、分隔、比较、拼接等) 注意区分 == 和 equals 的区别 508 //推荐单字符串操作时使用 s += "str";来代替 s = s + "str" ; 前者效率更高 509 //一般情况下执行效率:StringBuilder > StringBuffer > String 510 //所以 511 // 1.当字符串相加操作或者改动较少的情况下,建议使用 String 512 // 2.当字符串相加操作较多的情况下,建议使用StringBuilder 513 // 3.如果采用了多线程,则使用StringBuffer。 514 } 515 }