Java知识之字符串

作者: StrongZhao | 来源:发表于2016-08-04 00:35 被阅读73次

    Java字符串知识框架图

    Paste_Image.png

    Java字符串

    ** 1. 不可变字符串(String) **
    ** 2. 可变字符串(StringBuffer,StringBuilder) **

    不可变字符串(String)

    String是一个不可变的字符序列,那么为什么String类是不可变的呢?因为创建一个String对象,本质就是一个字符的数组,并且String类内的属性,除了hash属性外,其他的属性都被定义成私有的(private)且是最终的(final)属性。

    String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。

      1. 创建String对象
        创建一个String对象我们有两种形式,一种是引用静态区中的字符串的字面量,另外一种是引用堆上的字符串对象。
        ex:
      public static void main(String[] args){
          String str = "赵贺强";
          String str1 = new String("zhaoheqiang");
      }
    
    • String中常用的方法
      ex:
      public static void main(String[] args){
              String str = "zhaoheqiang";
              //获取字符串的长度
              System.out.println(str.length());
              //获取字符
              System.out.println(str.charAt(5));
              //大小写
              System.out.println(str.toUpperCase()+":"+str.toLowerCase());
              //拼接字符串
              System.out.println(str+"赵贺强"+";"+str.concat("Derry"));
              //比较字符串是否相等
              System.out.println(str.equals("zhaoheqiang")+str.compareTo("赵贺强"));
              //判断开头,或者结尾是否包含某个字符或者字符串
              System.out.println(str.startsWith("zhao"));
              System.out.println(str.endsWith("qiang"));
              //模式匹配,字符串第一次或者最后一次出现字符或者字符串的下标位置
              System.out.println(str.indexOf("a")+":"+str.lastIndexOf("a"));
              //是否包含某个字符或者字符串
              System.out.println(str.contains("he"));
              //获取子串
              System.out.println(str.substring(0,5)+":"+str.substring(5));
              //删除字符串左右空白符
              System.out.println(str.trim());
              /*替换replace/replaceAll
                replaceAll参数regex是一个 regular-expression的匹配模式而不是一个简单的String;
              */
              System.out.println(str.replace("a","b")+str.replaceAll("a","b"));
              /*
                以某种匹配模式去分割字符串, 参数regex是一个正则的匹配模式而不是一个简单的String,
                对于分割的字符(串),通常是常见,普通的,没什么问题;但是对某些特殊字符,
                如果字符(串)正好是正则的一部分,则需要转义才能使用,这些字符有** | , + , * , ^ ,
                $ , / , | , [ , ] , ( , ) , - , . , \**等, 因它们是正则表达式中的一部分, 
                所以如果想用该字符本身, 这些字符需要进行转义(\\)才能表示它本身。
              */
              String str="abc|XYZ";  
              String[] b = str.split("\\|");
              System.out.println(str.split("a"));
              System.out.println(Arrays.toString(b));
              //判断字符串是否为空
              System.out.println(str.isEmpty());
      }
    

    可变的字符串

    1. StringBuffer
      StringBuffer类是线程安全的。StringBuffer类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。
    • StringBuilder
      StringBuilder类是线程不安全的。有加锁开销,效率略低。不用加锁,效率更高。StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。
      StringBuffer和StringBuilder都继承AbstractStringBuilder类,都重写了AbstractStringBuilder类的方法,常用的方法请参考StringBuffer和StringBuilder API
      String,StringBuffer和StringBuilder区别可以参考

    http://blog.csdn.net/kingzone_2008/article/details/9220691
    http://www.zhihu.com/question/20101840

    相关文章

      网友评论

        本文标题:Java知识之字符串

        本文链接:https://www.haomeiwen.com/subject/nozxsttx.html