zoukankan      html  css  js  c++  java
  • Java基础常见类之String类

    一、String类是什么

    public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
    
    /** Cache the hash code for the string */
    private int hash; // Default to 0
    
    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;
    

      由第一段源码可知,String是一个final类,底层实现是final的字符数组,一旦创建,无法改变。

      字符串是常量;他们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。

    二、如何创建

      String s1 = "abc";//字符串常量池中创建一次(如不存在)

      String s2 = new String("abc");//字符串常量池中和堆中各创建一次

       // 更多的构造器,请参见API

      关于一个比较经典的面试题:String s1 = new String("hello");创建了几个对象的问题,可以参考源码中相关的构造器的源码,结合String的内存分析,便可以从深入进行理解了!

    关于这个问题,详见:http://www.cnblogs.com/dangzhenjiuhao/p/4585389.html

    三、常用方法

        第一部分:基本都是见名知意,详细的介绍,请参见API

      代码示例:

    @Test
        public void test1() {
            String str = "HelloWorld";
            // length()——字符串的长度
            System.out.println(str.length());// 10
            // charAt(int)——指定索引处(索引从0开始)的char
            System.out.println(str.charAt(2));// 1
            // equals(Object)——比较字符串的内容;equalsIgnoreCase不区分大小写的比较
            System.out.println("HelloWorld".equals(str));// true
            // indexOf()——索引操作(包含几个重载方法);lastIndexOf()为镜像操作,不再赘述
            System.out.println(str.indexOf(2)); // -1(不存在2的字符)
            System.out.println(str.indexOf("llo")); // 2
            // startsWith()——是否以指定字符串开头;endsWith()——为镜像操作
            System.out.println(str.startsWith("ello", 1));// true
            // regionMatches()——与指定字符串的区域匹配,包含两个重载方法,详细介绍参见API
            System.out.println(str.regionMatches(2, "hello", 2, 2));// true
        }

    第二部分

    代码实例:

    @Test
        public void test2() {
            String str = "more love";
            // subString()——字符串截取,两个重载方法都是左闭的(两个参数的右开)
            System.out.println(str.substring(5, 8));// lov
            // replace()——进行替换操作;replaceAll是匹配正则表达式的,详细请参见API
            System.out.println(str.replace('o', 'e'));// mere leve
            // trim()——去除前导空白和尾部空白
            System.out.println(str.trim());// mere leve
            // concat()——连接字符串
            System.out.println(str.concat(" for you"));  // more love for you
            // split()——根据正则表达式分割字符串,拆分为String[]
            System.out.println("a,b,c,d,e".split(",").length);// 5
        }

     以下几个练习题可以试试!

         // 1.如何实现自己的trim
                // 通过charAt进行遍历,从头开始遍历到到非空格,再从尾部做一遍,subString()取值即可(注意异常情况)
            // 2.反转字符串中的指定的部分
                // 将字符串分割成3份,一份前面的,一份需要反转的,一份后面的,再将第2部分反转,添加,再组合成新的字符串
            // 3.获取一个字符串在另外一个字符串中出现的次数
                // 通过indexOf(String)的循环判断,不断向后判断,直到末尾
            // 4.找出两个字符串中最大相同子串
                // 将短的串依次递减(第一位减掉,比较;最后一位减掉,比较,整数前两位减掉,循环...)看长串是否包含

     String类与基本数据类型的转换:

    @Test
        public void test3() {
            String str = "123";
            // String转基本数据类型,通过包装类的parse系列方法
            int i = Integer.parseInt(str);
            // 基本数据类型转String,简单的可以直接+"",通过方法是String.valueOF(),或者toString()
            String s = String.valueOf(i);
    
            // String与字节数组的转换:str.getBytes()方法得到字节数组;再通过String构造器将字节数组转为字符串
            byte[] bytes = str.getBytes();
            String s1 = new String(bytes);
    
            //String与字符数组的转换:str.toCharArray()方法,char[]转String同样是可以通过构造器
            char[] chars = str.toCharArray();
            String s2 = new String(chars);
        }

    四、可变字符串StringBuffer与StringBuilder

       其中,StringBuffer是线程安全的,而StringBuilder是线程不安全的,但它效率更高

       基本构造器:

         StringBuffer sb = new StringBuffer();
            StringBuffer sb2 = new StringBuffer("abc");
    

      

     // 当然它的底层还是字符数组,但它有容量的概念,修改的时候是可以改变容量的

    常用的方法:

    @Test
        public void test4() {
            StringBuffer sb = new StringBuffer("abc");
            // append()——追加
            System.out.println(sb.append("def").toString());//"abcdef"
            // insert()——在指定位置插入
            System.out.println(sb.insert(1, "bb"));//abbbcdef
            // reverse()——反转
            System.out.println(sb.reverse().toString());//fedcbbba
            // 其它和字符串相类似的方法不再赘述
        }

  • 相关阅读:
    springMVC学习--RESTful支持
    Java中的值传递和引用传递
    SpringMVC学习--json
    SpringMVC学习--文件上传
    SpringMVC学习--异常处理器
    SpringMVC学习--数据回显
    SpringMVC学习--校验
    SpringMVC学习--参数绑定
    SpringMVC学习--功能完善
    SpringMVC学习--springmvc和mybatis整合
  • 原文地址:https://www.cnblogs.com/zhuangwei1015/p/10009407.html
Copyright © 2011-2022 走看看