zoukankan      html  css  js  c++  java
  • String StringBuilder StringBuffer

    idea快捷键:ctrl+n  查找功能  继续按ctrl+F12将当前类所有的方法列出来



    练习1•
    /**
    *十分制的地址是x.x.x.x的格式,四个x的取值范围是【0,255】,写出程序
    * 检查输入的ip地址是否合法,true表示合法
    */
    public class StringCheck{
        private static boolean checkIpAdress(String ip) {
            String[] str = ip.split("\.");  //split函数,以"."为间隔将字符串分开
            if (str.length != 4) {    //145.59.的情况,有小于四个有效数据的情况
                return false;
            }
            for (int i = 0; i < str.length; i++) {
                str[i] = str[i].trim();    //将空格省去
                if (str.length == 0) {     //空格的情况,如果两个点之间是空格,返回错误
                    return false;
                }
            }
            /**
             * try catch语句处理45.34.87.988的情况,不是0-255的情况
             */
                try {
                    for (int i = 0; i < str.length; i++) {
                        int data = Integer.valueOf(str[i]);   //将str转为整型
                        if (data < 0 || data > 255) {
                            return false;
                        }
                    }
                } catch (NumberFormatException err) {
                    return false;
                }
                return true;
            }
        public static void main(String[] args) {
            String ip="127.8.0.1";
            System.out.println(checkIpAdress(ip));//true
            String ip1="12.546.4.5";
            System.out.println(checkIpAdress(ip1));//false
            String ip2="12.56.";
            System.out.println(checkIpAdress(ip2));//false
            String ip3="12.54g.75.90";
            System.out.println(checkIpAdress(ip3));//false
        }
    }

     练习2:

    String字符串拼接

    public class StringTest {
        public static void main(String[] args) {
            String str1="test";
            String str2="ok";
            String str3=str1+" "+str2;
            System.out.println(str3);
        }
    }
    /**拼接两个字符串,需要new一次StringBuilder对象,调用三次append方法
    *因为new对象时默认为空
    *StringBuilder sb = new StringBuilder();
    * sb.append(str1);
    * sb.append(" ");
    * sb.append("ok");
    * String str3 = sb.toString(); //StringBuilder返回toString方法的时候,需要new String("xxxxxx");
    */
    反汇编代码(javap -c 类名.class)

     根据底层实现可得,字符串的拼接是通过StringBuilder的append方法实现,所以每拼接一次就要new一次StringBuilder对象,再调用append方法;当有如下这种程序时,便会产生大量的对象;

     String str = "hello";
            for(int i=0; i<10; ++i){
                str = str + String.valueOf(i);
            }
            System.out.println(str);
            

    因为StringBuilder对象没有toString方法,所以每次打印时,都会new String()对象;

    每拼接一次,都会执行下面代码,会产生一个StringBuilder对象和String对象,会产生大量的对象

        /**

         * StringBuilder sb = new StringBuilder();

     * sb.append(str);
    * sb.append(String.valueOf(i));
    * str = sb.toString(); new String(xxx);
    */

    所以直接用StringBuilder对象
            String string = "hello";
            StringBuilder sb = new StringBuilder(string);
            for(int i=0; i<10000; ++i){
                sb.append(String.valueOf(i));
            }
            string=sb.toString(); // new String(xxxx)
            System.out.println(string);

    这样的内层实现只是在第一次new一次StringBuilder对象,在for循环里面持续调用append方法,将要添加的字符串拼接起来,然后再new String对象,调用它的toString方法,将它赋给string字符串,最后打印。这样的处理,只需要new一个StringBuilder()和String()对象。

    StringBuffer类的所有方法都被synchronized关键词修饰,所以StringBuffer用在多线程环境中,单线程环境用StringBuilder就行。

  • 相关阅读:
    数独小算法,测试通过(Java)
    OC运行时和方法机制笔记
    AlertView点击确定后再执行后面的代码
    对第三方库集成方式的分析
    当程序进入后台时执行长时间代码
    iOS开发之GCD使用总结
    缓存网络请求的结果
    防止 NSTimer retain 作为 target 的 self
    获取设备唯一码
    原生网络请求以及AFN网络请求/异步下载
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/11747319.html
Copyright © 2011-2022 走看看