9.1 字符串String类
String 类我们在前面章节介绍过,并且把它放在了int、double、boolean这些类型的后面,实际上String和这些类型有本质区别:
String是一个类。
类就有属性,而String的属性很简单,就是一个字符类型的数组,表现出来是一个双引号引着的n个字符,例如
String str="i am a student learning Java.";
对象的行为表现为函数,接下来要学习的就是String类的函数。
返回类型 | 函数名及参数 | 说明 | 示例 |
---|---|---|---|
int | length() | 计算字符串的长度 | String a="abcedf";那么a.length()的值就是6 |
char | charAt(int i) | 返回下标为i的字符是多少,下标从0开始 | String a="abcedf"; a.charAt(0)的值就是'a' |
boolean | equals(String str) | 计算对象和str的内容是否一致,比较两个字符串的值是否相等不能使用==,只能使用本函数 | String a="abcedf"; String b="abcedf"; String c="12";那么a.equals(b)的值就是true,a.equals(c)的值就是false |
boolean | equalsIgnoreCase(String str) | 忽略大小写,计算对象和str的内容是否一致 | String a="abcedf"; String b="Abcedf"; String c="12"; 那么a.equalsIgnoreCase(b)的值就是true |
String | toUpperCase() | 把字符串里面所有的字母都变成大写。(原字符串值不变) | String a="abcedf12F"; a=a.toUpperCase()后a的值就是"ABCDEFG12F" |
String | toLowerCase() | 把字符串里面所有的字母都变成小写。(原字符串值不变) | String a="ABCDEFG12F"; a=a.toLowerCase()后a的值就是"abcedf12F" |
String | trim() | 把字符串前后的空格删掉,包括空格、tab字符,转行。(原字符串值不变) | String a="abcedf "; a=a.trim()后a的值就是"abcedf" |
String | substring(int start,int end) | 截取字符串,从下标start开始到下标end结束,其中包含start但不包含end。end参数可以没有,表示截取到末尾。(原字符串值不变) | String a="abcedf12F"; a.substring(1,3)的值是"bc" a.substring(0,3)的值是"abc" a.substring(3)的值是"edf12F" |
int | indexOf(String str) | str在字符串中第一次出现的下标。如果没有出现过,返回-1 | String a="abcedf12F"; a.indexOf("ce")的值就是2 |
int | lastIndexOf(String str) | str在字符串中最后一次出现的下标。如果没有出现过,返回-1 | String a="abcedfb2F"; a.lastIndexOf("b")的值就是6 |
int | indexOf(String str,int k) | str在字符串中从下标k开始,第一次出现的下标。如果没有出现过,返回-1 | String a="abcedfceF"; a.indexOf("ce",4)的值就是6 |
int | lastIndexOf(String str,int k) | str在字符串中从下标k开始,最后一次出现的下标。如果没有出现过,返回-1 | String a="abcedfb2F"; a.lastIndexOf("b",3)的值就是6 |
String | replaceAll(String str1,String str2) | 把字符串中所有str1替换成str2。(原字符串值不变) | String a="abceadfab2F"; a.replaceAll("a","A")的计算结果是"AbceAdfAb2F" a.replaceAll("a","")表示删掉所有字符'a',计算结果是"bcedfb2F" |
String | + | 两个字符串或数值前后相连 | String a="abceadfab2F"; a=a+"3";后a的值是"abceadfab2F3" |
char[] | toCharArray() | 将字符串的字符保存到一个字符数组(原字符串值不变) | String a="abceadfab2F"; a.toCharArray()后得到一个字符数组,它值是{'a','b','c','e','a','d','f','a','b','2','F'} |
String[] | split(String str) | 将字符串按照str为分隔字分成一个数组,str可以是正则表达式 | String a="abceadfab2F"; a.split("a")后得到的数组是{"bce","df","b2f"} |
char[] | toCharArray() | 将字符串的字符保存到一个字符数组(原字符串值不变) | String a="abceadfab2F"; a.toCharArray()后得到一个字符数组,它值是{'a','b','c','e','a','d','f','a','b','2','F'} |
boolean | contains(String str) | 假如对象内容包含str的值,那么返回true;否则返回false | String a="abceadfab2F"; a.contains("ab")的值是true a.contains("abd")的值是false |
官方文档String
这些是String类的一些常用函数,在面向对象里面,我们称它们为方法(method)。函数、方法这两个术语不用区分。它们就是对象的行为。使用方法是:
对象名.方法名(参数)
注意有些方法是没有参数的,这类方法只需要对象本身的属性就能计算,例如str.length():计算字符串str的长度
下面是一个使用substring,indexOf和replace的例子,提取一个HTML片段的内容,a是一段html代码片段:
public static void main(String[]args){
String a="< li id='li_010000'>< a href='#' onclick='getSubChapter('010000')'>第1章& nbsp;& nbsp;Java基础< /a>"+"< li id='li_020000'>< a href='#'onclick='getSubChapter('020000')'>第2章& nbsp;& nbsp;变量和运算符< /a>"+"< li id='li_030000'>< a href='#' onclick='getSubChapter('030000')'>第3章& nbsp;& nbsp;分支结构< /a>'"+"< li id='li_040000'>< a href='#'onclick='getSubChapter('040000')'>第4章& nbsp;& nbsp;循环结构< /a>";
int start=-1;
while(true){
//获得开始的位置
start=a.indexOf("第",start+1);
//获得结束的位置
int end=a.indexOf("< /a>",start+1);
//找不到"第"字,结束循环
if(start==-1)
break;
//切出片段
String t=a.substring(start,end);
//删掉中间的HTML
t=t.replaceAll("& nbsp;"," ");
System.out.println(t);
}
}
public static void main(String args[]){
String a="abceadfab2F";
//数组temp的值是{"","bce","df","b2f"}
String[]temp=a.split("a");
//打印temp
for(int i=0;i < temp.length;i++)
System.out.println(temp[i]);
}