String相关内容

字符串基础

  1. 字符串常量:

​ 需要使用“ ”双引号包裹起来

“ 12435” “asdhskdfgb” "我爱你,中国"

​ 一个字符串不能放在多行,如果要过表示换行可以在字符串中间添加\n,来表示换行

  1. 字符串变量:

    • String str =“asdfa”;
    • String str = new String("dfasdg");
    • String str = new String(byteArray);
    • String str = new String(charArray);
  2. 字符串的特点:

    1. 字符串的内容永不可变,所以字符串是可以共享使用的
    2. 正因为字符串不可以改变,所以字符串是可以共享使用的
    3. 字符串效果上相当于是一个char[]字符数组,但是底层原理是byte[]字节数组
    4. new出来的字符串直接在堆当中,直接赋值的字符串在堆中的字符串常量池中
  3. 字符串连接(+):

    • 多个字符串连接
      • public String concat(String str)将当前字符串和参数字符串拼接为一个新的字符串并返回
    • 和其他数据连接
      • 通过+可以直接对字符串(或者其他数据类型)常量和变量做连接操作
  4. 字符串的特性:

    • 字符串无法被修改
    • 字符串的值无法被修改,但是字符串对象可以引用别的字符串。
  5. 字符串信息获取:

    1. 长度:s.length();

    2. 查找子字符串的位置:

      1. s.indexOf(int c);
      2. s.indexOf(String str);
      3. s.lastIndexOf(String str);
    3. 获取指定位置的字符:s.charAt(int index);

    4. 获取子字符串:(如不给定beginIndex则默认从0开始,到endIndex的前一个字符)

      1. s.subString(int beginIndex);
      2. s.subString(int beginIndex,int endIndex);
    5. 字符串判断;

      1. 判断字符串的开始和结尾:
        1. s.startsWith(Stirng prefix);
        2. s.endsWith(String suffix);
      2. 判断字符串是否相等:
        1. ==
        2. s.equals(String str);
        3. s.equalsIgnoreCase(String str);
        4. s.compareTo(String str);
          • compareTo比较的不是字符串是否相等,这里比较的是字符串的大小,字符串的大小怎么比较呢?按各个字符比较相同的字符跳过,遇到不同的字符,返回字符的差(Ascll码值 ),如果两个字符串,前面的几个字符相等,长度不相等(“”siki”,”sikiedu”)返回两个字符串的长度差。(常用于排序)
      3. 判断是否包含某个字符串,包含返回true
        1. s.contains(String str);
      4. 判断字符串是否为空
        1. s.isEmpty();
        2. 空的两种状态:
          1. String s = "";空字符串
          2. String s = null;空对象
    6. 字符串转换操作:

      1. 字母大小写转换
        1. s.toLowerCase();
        2. s.toUpperCase();
      2. 字符串分割(返回的是一个字符串数组,limit可以控制字符串数组中的元素个数)
        1. s.split(String str);
        2. s.split(String str,int limit);
      3. 去除空格(前面和后面的空格,不包括中间的空格)
        • s.trim()
      4. 字符串替换
        1. s.replace(char oldChar,char new Char);
        2. s.replace(String oldStr,String newStr);
      5. 字符串格式化(日期和时间的格式化)
      6. 在 Java中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换
    7. 将一个字符串翻转:

      1. 通过String类的charAt()的方法来获取字符串中的每一个字符,然后将其拼接为一个新的字符串。

        1
        2
        3
        4
        5
        6
        7
        public static String CharAtreverse(String s) {
        int length = s.length();
        String reverse = "";
        for (int i=0; i<length; i++)
        reverse = s.charAt(i) + reverse;
        return reverse;
        }
      2. 通过String的toCharArray()方法可以获得字符串中的每一个字符串并转换为字符数组,然后用一个空的字符串从后向前一个个的拼接成新的字符串。

        1
        2
        3
        4
        5
        6
        7
        8
        9

        public static String reverseCharArray(String s) {
        char[] array = s.toCharArray();
        String reverse = "";
        for (int i = array.length - 1; i >= 0; i--) {
        reverse += array[i];
        }
        return reverse;
        }
      3. 通过StringBuilder的reverse()方法,最快的方式

        1
        2
        3
        4
        5
        public static String reverseStringBuilder(String s) {
        StringBuilder sb = new StringBuilder(s);
        String afterreverse = sb.reverse().toString();
        return afterreverse;
        }

String和StringBuilder和StringBuffer

1、在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。如常量的声明,少量的字符串操作(拼接,删除等)。

2、在单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。不能使用String”+”来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。如JSON的封装等。

3、在多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer。如HTTP参数解析和封装等。

Thanks!