String类中的成员变量value是一个字符数组
构造方法
1.通过字符数组进行构造字符串
实现方法:1.首先进行对各个参数进行判断 2.调用了Arrays.copyOfRange方法。
public String(char value[], int offset, int count){};
方法
1.charAt()
返回指定索引处的char值。指数范围从0到length()-1.序列的第一个char值是索引为0,下一个索引为1。
public char charAt(int index){};
2.compareTo()
String对象按ASCII顺序在参数字符串之前,返回一个整数。
public int compareTo(String anotherString){};
3.concat()
将指定的字符串连接到该字符串的末尾
public String concat(String str){};
4.format()
使用指定的格式字符串和参数返回格式化的字符串。如果比格式说明符更多的参数,额外的参数将被忽略。
public static String format(String format,
Object... args){};
5.getBytes()
将字符串转变为字节数组中。
public byte[] getBytes(){};
6.toCharArray()
将字符串转换成为字符数组。(疑问:为什么不直接返回value?方法中为什么不能使用Arrays.copyof()方法)
实现方法:1.创建一个字符数组 2.调用System类中的arraycopy方法。
public char[] toCharArray(){};
7.getChars()
将字符串中的字符复制到目标字符数组中
实现方法:调用了System.arraycopy方法
public void getChars(int srcBegin, //起始位置
int srcEnd, //结束位置
char[] dst, //目标数组
int dstBegin) //目标数组的起始位置
8. equals()
比较两个字符串是否相等。一般不用此方法。用Objects.equals(Oject a,Object b);
实现方法:1.用==判断地址值是否相等。如果相等返回的是true。 2.用instanceof关键字判断anObject是否属
于String类。 3.比较两个字符串的长度是否相等。 4.将两个字符串转变为数组,利用while循环比较每个字符是否相等。
public boolean equals(Object anObject){};
9.equalsIgnoreCase(String anotherString)
在忽略字母大小写的情况下比较两个字符串。
实现方法:运用了三目运算符和逻辑&&运算符(逻辑&&运算符的优先级高于三目运算符)
public boolean equalsIgnoreCase(String anotherString){
//1.先判断this==anotherString,如果相等的话直接返回true,后面的不在计算。 2.如果不相等,先判断
//anotherString是否为null。 3.再判断两个字符串的长度是否相等。 4.再利用regionMatches方法判断
return (this == anotherString) ? true
: (anotherString != null)
&& (anotherString.value.length == value.length)
&& regionMatches(true, 0, anotherString, 0, value.length);
};
10. hashCode()
返回字符串的哈希码。 计算公式为:s[0]*31^(n-1) + s[1]*31^(n-2) + … + s[n-1] (s[0]为ASCII值)
public int hashCode(){}
11.regionMatches()
在忽略大小写的情况下,测试两个字符串的部分范围是否相等。
实现方法:1.将两个字符串都转换为数组 2.判断toffset<0、ooffset<0、toffset+len是否大于数组长度、offset+len是否大于数组长度。 3.循环数组,进行判定。用到了toUpperCase、toLowerCase方法。
public boolean regionMatches(boolean ignoreCase, //是否忽略大小写
int toffset, //从第几个数开始比较(索引从0开始)
String other, //比较的字符串
int ooffset, //第二个字符串从第几个数开始比较(索引从0开始)
int len){}; //比较的长度
12.trim()
去掉字符串头部和尾部的空格(头部和尾部可能有多个空格)
实现方法:1.将字符串转换为数组 2.去掉头部的空格,要从零开始循环判断。去掉尾部的空格,从尾部开始循环判断。 3.利用substring方法。
public String trim(){};
13.toUpperCase()
将小写字母转换成大写字母
实现方法:比较复杂,以后看
public String toUpperCase(){};
14.toLowerCase()
将大写字母转换成小写字母
实现方法:比较复杂,以后看
public String toLowerCase(){};
15.substring(int beginIndex, int endIndex)
返回字符串的字串[beginIndex,endIndex)
实现方法:1.先判断beginIndex<0 2.在判断endIndex>0 3.最后判断endIndex-beginIndex<0. 4.用三目运算符进行判断(方法中的即三目运算符)用到了String类的构造方法
public String substring(int beginIndex, int endIndex){
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
};
public String substring(int beginIndex){};
16.startsWith(String prefix, int toffset)
测试从指定索引处开始的这个字符串的子字符串是否以指定的前缀开始。
实现方法:1.先将字符串转换成为数组,在想前缀转换成数组。 2.判断toffset<0||toffset+prefix的长度大于字符串的长度 3.用while循环进行比较
public boolean startsWith(String prefix, int toffset){};
17.split(String regex, int limit)
按给定的字符串分割当前字符串
实现方法:实现方法繁琐,以后看
public String[] split(String regex, int limit){};
//参数:{@code limit}当limit>0时,分割limit-1次,得到的数组长度<=limint
//当limit=0时,分割任意次数,如果最后匹配,不会得到空的元素。
//当limit<0时,分割任意次数,如果最后匹配,会得到空的元素
18.replaceFirst()
将此字符串中与给定正则表达式匹配的第一个子字符串替换为给定的字符串。
实现方法:
public String replaceFirst(String regex,
String replacement)
19.indexOf()
返回指定字符在字符串中第一次出现的索引,在指定的索引处开始搜索。
public int indexOf(int ch, int fromIndex){};