黑马程序员技术交流社区

标题: 自己总结的String类知识点,不足之处望小伙伴们指出! [打印本页]

作者: oumentg    时间: 2016-2-26 16:57
标题: 自己总结的String类知识点,不足之处望小伙伴们指出!
由于字数超出限制,只好截图一部分了。










三:字符串的特点

1.  字符串的特点:
     1)
一旦被赋值,就不能改变。
     注意:这里指的是字符串的内容不能改变,引用可以改变。

       2)
String字面值对象和构造方法创建对象的区别

       栈--方法区常量池 String s = new String(“hello”)
        和栈--方法区常量池String s = “hello”;的区别?
        有。前者会创建2个对象,后者创建1个对象。

      3)
==:比较引用类型  比较的是地址值是否相同
       equals:比较引用类型默认也是比较地址值是否相同,
       而String类重写了equals()方法,比较的是内容是否相同。


       4)
字符串如果是变量相加,先开空间,在拼接。
       字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。

       5)
  String s1 = "hello";
  String s2 = "hel";

6)
  System.out.println(s1.compareTo(s2)); // 2
字符串会自动转换为一个字符数组。

  private final char value[];

    字符串会自动转换为一个字符数组。

  public int compareTo(String anotherString) {
          //this -- s1 -- "hello"
          //anotherString -- s2 -- "hel"

        int len1 = value.length; //this.value.length--s1.toCharArray().length--5
        int len2 = anotherString.value.length;//s2.value.length -- s2.toCharArray().length--3
        int lim = Math.min(len1, len2); //Math.min(5,3); -- lim=3;
        char v1[] = value; //s1.toCharArray()
        char v2[] = anotherString.value;

        //char v1[] = {'h','e','l','l','o'};
        //char v2[] = {'h','e','l'};

        int k = 0;
        while (k < lim) {
            char c1 = v1[k]; //c1='h','e','l'
            char c2 = v2[k]; //c2='h','e','l'
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2; //5-3=2;
   }

关于compareTo()的问题:如果比较的两个字符串长度不一样,较短的和较长的前一部分一样。
这是返回两个字符串之差。如果前一部分就不一样,就按照字典顺序比较规则返回-1,1,0




作者: oumentg    时间: 2016-2-26 17:01
String类

一:构造方法

概括:构造方法可以转换字节数组,字符数组,字符串

public String():无参构造。
public String(byte[] bytes): 把字节数组转换成字符串。把字节数组元素转换为字符
public String(byte[] bytes, int index,int length): 把字节数组的一部分转换为字符串
public String(char[] value): 把字符数组转换成字符串
public String (char[] value, int index, int length): 把字符数组的一部分转换为字符串
public String(String original) :把字符串本身转换为字符串
String(StringBuffer buffer)
String(StringBuilder builder)


二:成员方法  (由于String对象长度/内容不能改变,所以String类没有(添加,插入,删除)修改功能,只能查询和判断,在原来的基础上转换

按功能分类:判断,获取,转换,比较,替换,分割,除白
1.
判断功能:相等,包含,前后缀,是否为空,和正则表达式一致
equals(Object): 比较字符串的内容是否相同,区分大小写
equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写
contentEquals(CharSequence cs) : 和字符序列是否相等
contentEquals(StringBuffer sb) :将此字符串与指定的 StringBuffer 比较
contains(String str):  是否包含小字符串
startsWith(String str):是否以某个指定的字符串开头
endsWith(String str): 是否以某个指定的字符串结尾
isEmpty(): 字符串是否为空
     boolean matches(String regex) :和给定的正则表达式是否一致

作者: oumentg    时间: 2016-2-26 17:02
2.
获取功能:获取长度,指定位置的元素,截取
        int    length(): 长度
        char charAt(int index): 获取指定索引位置的字符
        int    codePointAt(int index) :返回指定索引处的字符(Unicode 代码点)。
        int    codePointBefore(int index) :指定索引之前的字符(Unicode 代码点)。
        int    offsetByCodePoints(int index, int codePointOffset)  返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引

        int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
        int indexOf(int ch,int fromIndex): 从指定位置后第一次出现处的索引。
为什么这里是int类型,而不是char类型?
原因是:'a'和97其实都可以代表'a'
        int  indexOf(String str):返回第一次出现的位置索引
        int  indexOf(String str,int fromIndex)
    lastIndexOf(int ch)返回最后一次出现的位置索引
    lastIndexOf(int ch, int fromIndex)
    lastIndexOf(String str)
    lastIndexOf(String str, int fromIndex)

        String substring(int start): 从指定位置开始截取字符串,默认到末尾。
        String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串。

3.
转换功能:
byte[] getbytes(): 把字符串转换为字节数组
byte[]   getBytes(Charset charset)
char[] toCharArray(): 把字符串转换为字符数组。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
static String copyValueOf(char[] data)  返回指定数组中表示该字符序列的 String。
static String copyValueOf(char[] data, int offset, int count) :  返回指定数组中表示该字符序列的 String。   

static String valueOf(char[] chs): 把字符数组转成字符串。
static String valueOf(char[] data, int offset, int count)
static String valueOf()可以 ( boolean, char, int, long, double, float, Object, char[ ])8种类型的数据转换为字符串

String toLowerCase(): 转小写
String toUpperCase(): 转大写
String concat(String str): 拼接字符串 (concatenate)

4.
比较功能
int compareTo(String str): 按字典顺序比较两个字符串
int compareToIgnoreCase(String str)

5.
替换功能:
String replace(char old, char new):  把字符串里的某个字符替换为新字符
String replace(String old, String new): 把字符串里的指定子串替换为新子串
String replace(CharSequence target, CharSequence replacement)
          使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
String replaceAll(String regex, String replacement)
          使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement)
          使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
作者: oumentg    时间: 2016-2-26 17:04
6.
除去字符串两端空白
String trim(): 除去字符串两端空白

7.
String[] split(String regex)
          根据给定正则表达式的匹配拆分此字符串。


8.
使用指定的格式字符串和参数返回一个格式化字符串。
static String format(String format, Object... args)

9.
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
          将字符从此字符串复制到目标字符数组。

10.
int hashCode(): Stirng重写了hashCode()方法: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
          返回此字符串的哈希码。

11.
String toString()
          返回此对象本身(它已经是一个字符串!)。

        
三:字符串的特点

1.  字符串的特点:
     1)
一旦被赋值,就不能改变。
     注意:这里指的是字符串的内容不能改变,引用可以改变。

       2)
String字面值对象和构造方法创建对象的区别
       栈--方法区常量池 String s = new String(“hello”)
        和栈--方法区常量池String s = “hello”;的区别?
        有。前者会创建2个对象,后者创建1个对象。

      3)
==:比较引用类型  比较的是地址值是否相同
       equals:比较引用类型默认也是比较地址值是否相同,
       而String类重写了equals()方法,比较的是内容是否相同。

       4)
字符串如果是变量相加,先开空间,在拼接。
       字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
       5)
  String s1 = "hello";
  String s2 = "hel";

6)
  System.out.println(s1.compareTo(s2)); // 2
字符串会自动转换为一个字符数组。
  private final char value[];

    字符串会自动转换为一个字符数组。

  public int compareTo(String anotherString) {
          //this -- s1 -- "hello"
          //anotherString -- s2 -- "hel"

        int len1 = value.length; //this.value.length--s1.toCharArray().length--5
        int len2 = anotherString.value.length;//s2.value.length -- s2.toCharArray().length--3
        int lim = Math.min(len1, len2); //Math.min(5,3); -- lim=3;
        char v1[] = value; //s1.toCharArray()
        char v2[] = anotherString.value;

        //char v1[] = {'h','e','l','l','o'};
        //char v2[] = {'h','e','l'};

        int k = 0;
        while (k < lim) {
            char c1 = v1[k]; //c1='h','e','l'
            char c2 = v2[k]; //c2='h','e','l'
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2; //5-3=2;
   }
关于compareTo()的问题:如果比较的两个字符串长度不一样,较短的和较长的前一部分一样。
这是返回两个字符串之差。如果前一部分就不一样,就按照字典顺序比较规则返回-1,1,0
作者: oumentg    时间: 2016-2-26 18:59
oumentg 发表于 2016-2-26 17:01
String类

一:构造方法

~~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2