文章目录
- 1.int length();
- 2.char charAt(int index);
- 3.char toCharArray();
- 4.int indexOf(...)
- 5.int lastIndexOf()
- 6.toUpperCase(); toLowerCase();
- 7.String[] split("字符")
- 8.String trim();
- 9.replace(char oldChar,char newChar);
- 10.String substring(int beginIndex,int endIndex)
- 11.boolean equalsIgnoreCase(String)
- 12.boolean contains(String str)
- 13.boolean startsWith(String prefix)
- boolean startsWith(String prefix, int toffset)
- 14.boolean endsWith(String suffix)
- 15. int compareTo(String anotherString)
1.int length();
语法:字符串变量名.length();
返回值为 int 类型。得到一个字符串的字符个数(中、英、空格、转义字符皆为字符,计入长度)
/** The String is used char value[] **/
public int length() {
return value.length;
}
/** The value is used for character storage. */
private final char value[];
2.char charAt(int index);
语法 :字符串名.charAt(值);
返回值为 char 类型。从字符串中取出指定位置的字符
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
//If index right return value[index]
return value[index];
}
3.char toCharArray();
语法 :字符串名.toCharArray();
返回值为 char 数组类型。将字符串变成一个字符数组
public char[] toCharArray() {
// Cannot use Arrays.copyOf because of class initialization order issues
char result[] = new char[value.length];
System.arraycopy(value, 0, result, 0, value.length);
return result;
思考:为什么要拷贝一个新数组返回?直接返回value不就得了?
public char[] toCharArray() {
return value;
}
原因: 因为 Java 中数组实质上是 Array 类的实例,如果直接返回 value
,那么传递的是value[]数组的地址,一旦你修改了 toCharArray()
返回值里某个位置上的字符,那个 String
实例的值(即 value
)也会跟着变动,会破坏String类型设计的初衷。
System.arraycopy()代码解释: 复制指定的源数组的数组,在指定的位置开始,到目标数组的指定位置
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Object src : 原数组 int srcPos : 从原数据的指定位置开始复制
Object dest : 目标数组 int destPos : 目标数组的开始起始位置
int length : 要copy的数组的长度
4.int indexOf(…)
int | indexOf(int ch) | 返回指定字符第一次出现的字符串内的索引。 |
---|---|---|
int | indexOf(int ch, int fromIndex) | 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。 |
int | indexOf(String str) | 返回指定子字符串第一次出现的字符串内的索引。 |
int | indexOf(String str, int fromIndex) | 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。 |
语法 :字符串名.indexOf(“字符”);
字符串名.indexOf(“字符”,值);
查找一个指定的字符串是否存在,返回的是字符串的位置,如果不存在,则返回-1 。
public int indexOf(String str) {
return indexOf(str, 0);
}
public int indexOf(int ch, int fromIndex) {
final int max = value.length;
if (fromIndex < 0) {
fromIndex = 0;
} else if (fromIndex >= max) {
// Note: fromIndex might be near -1>>>1.
return -1;
}
if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
// handle most cases here (ch is a BMP code point or a
// negative value (invalid code point))
final char[] value = this.value;
for (int i = fromIndex; i < max; i++) {
if (value[i] == ch) {
return i;
}
}
return -1;
} else {
return indexOfSupplementary(ch, fromIndex);
}
}
/**
* Handles (rare) calls of indexOf with a supplementary character.
*/
private int indexOfSupplementary(int ch, int fromIndex) {
if (Character.isValidCodePoint(ch)) {
final char[] value = this.value;
final char hi = Character.highSurrogate(ch);
final char lo = Character.lowSurrogate(ch);
final int max = value.length - 1;
for (int i = fromIndex; i < max; i++) {
if (value[i] == hi && value[i + 1] == lo) {
return i;
}
}
}
return -1;
}
5.int lastIndexOf()
int | lastIndexOf(int ch) | 返回指定字符的最后一次出现的字符串中的索引。 |
---|---|---|
int | lastIndexOf(int ch, int fromIndex) | 返回指定字符的最后一次出现的字符串中的索引,从指定的索引开始向后搜索。 |
int | lastIndexOf(String str) | 返回指定子字符串最后一次出现的字符串中的索引。 |
int | lastIndexOf(String str, int fromIndex) | 返回指定子字符串的最后一次出现的字符串中的索引,从指定索引开始向后搜索 |
6.toUpperCase(); toLowerCase();
字符串大小写的转换
**实现原理:**在ASCII编码表中,A-Z 和 a-z 的 ASCII 编码的十进制刚好相差32,
实现思路就是将大写的转成十进制编码,再转换成小写字母的十进制编码,最后得到小写字母。
7.String[] split(“字符”)
根据给定的正则表达式的匹配来拆分此字符串。返回的是一个新的String数组。
String str = "boo:and:foo";
String[] arr1 = str.split(":");
String[] arr2 = str.split("o");
运行结果:
arr1 //{ "boo", "and", "foo" }
arr2 //{ "b", "", ":and:f" }
8.String trim();
去掉字符串左右空格。
9.replace(char oldChar,char newChar);
String | replaceAll(String regex,String replacement) | 将某个内容全部替换成指定内容 |
---|---|---|
String | repalceFirst(String regex,String replacement) | 将第一次出现的某个内容替换成指定的内容新字符替换旧字符,也可以达到去空格的效果一种。 |
10.String substring(int beginIndex,int endIndex)
截取字符串从开始位置到结束位置,传入的是int。
11.boolean equalsIgnoreCase(String)
忽略大小写的比较两个字符串的值是否一模一样,返回一个布尔值 。
12.boolean contains(String str)
判断一个字符串里面是否包含指定的内容,返回一个布尔值 。
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1;
}
原理:调用的是indexOf()方法去变遍历value[]是否有这个子串,如果没有indexOf()方法返回的是-1,如果有返回的是字符串所在数组下标的位置。
13.boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。返回一个布尔值 。
boolean startsWith(String prefix, int toffset)
测试在指定索引处开始的此字符串的子字符串,是否以指定的前缀开头。
public boolean startsWith(String prefix, int toffset) {
char ta[] = value;//String定义的字符串
int to = toffset;//传入的索引下标
char pa[] = prefix.value;//传入的前缀字符串
int po = 0;//前指针
int pc = prefix.value.length;//后指针
// Note: toffset might be near -1>>>1.
if ((toffset < 0) || (toffset > value.length - pc)) {//如果越界
return false;
}
while (--pc >= 0) {//后指针--
if (ta[to++] != pa[po++]) {//如果ta(value数组)的索引下标(传入的toffset开始++)不等于pa数组(传入的字字符串),(索引从0开始)++,返回false
return false;
}
}
return true;
}
14.boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。返回一个布尔值 。
15. int compareTo(String anotherString)
返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
- 如果参数字符串等于此字符串,则返回值 0;
- 如果此字符串小于字符串参数,则返回一个小于 0 的值;
- 如果此字符串大于字符串参数,则返回一个大于 0 的值。