在 Java 基本数据类型一节中,我们已经知道 Java 中有两大数据类型:一个是基本数据类型,另一个是引用数据类型。字符串(String)便属于引用数据类型。字符串在 Java 程序中无处不在,其实我们在第一个 Java 程序中就已经使用过了字符串,打印语句中双引号中的Hello World就是一个字符串:System.out.println("Hello World")。
1.声明字符串String a; //声明一个字符串变量a String a,b; //声明两个字符串变量啊a、b2.创建字符串
创建一个String对象,并初始化一个值。String类是不可改变的,一旦创建了一个String对象,它的值就不能改变了。
给字符串变量赋值有很多方法引用字符串常量(直接赋值)
利用构造方法实例化
利用字符数组实例化
提取字符数组中的一部分创建字符串对象
5.2 连接字符串
我们可以使用加法运算符+将字符串和任意其他的数据类型进行连接操作。
除了“+”运算符,“+=”同样可以实现字符串拼接。
1.连接字符串2.连接其它字符类型
5.3 提取字符串信息 1.获取字符串长度 str.length()
获取字符串长度
2.获取指定的字符 str.charAt()指定索引处的字符返回
3.获取字符串索引位置 indexOf(String str)
查找字符在字符串中的位置,该方法用于返回参数字符串s在指定字符串中首次出现的索引位置,当调用字符串的indexOf()方法时,会从当前的字符串的开始位置搜索s的位置;如果没有检索到字符串s,该方法返回值是-1
indexOf(String str, int fromIndex)
返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
public int lastIndexOf(String str)
该方法用于返回参数字符串s在指定字符串中最后一次出现的索引位置,当调用字符串的lastIndexOf()方法时,会从当前的字符串的开始位置搜索s的位置,并将最后一次出现s的索引位置返回
indexOf(String str, int fromIndex)
返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引
4.判断字符串首尾内容 startsWith(String prefix)
startsWith(String prefix, int toffset)
endsWith(String suffix)
5.获取字符数组
toCharArray()方法可以将字符串转换为一个字符数组。
6.判断子字符串是否存在
字符串的contains()方法可以判断一个字符串中是否存在另一个字符子串。
5.4 字符串的操作 1.截取字符串
String substring()方法:实现截取字符串,利用字符串的下标索引来截取(字符串的下标是从0开始的,在字符串中空格占用一个索引位置)
substring(int beginlndex)截取从指定索引位置开始到字符串结尾的子串
substring(int beginlndex, int endlndex)
从beginIndex开始,到endIndex结束(不包括endIndex)
2.字符串替换 replace(CharSequence target, CharSequence replacement)
将指定的字符/字符串oldchar全部替换成新的字符/字符串newChar
replaceAll(String regex, String replacement)使用给定的参数 replacement替换字符串所有匹配给定的正则表达式的子字符串
replaceFirst(String regex, String replacement)
使用给定replacement 替换此字符串匹配给定的正则表达式的第一个子字符串
regex是正则表达式,替换成功返回替换的字符串,替换失败返回原字符串。
3.字符串分割
String[] split():根据匹配给定的正则表达式来拆分字符串,将分割后的结果存入字符数组中。
split(String regex)regex为正则表达式分隔符, . 、 $、 | 和 * 等转义字符,必须得加 \;多个分隔符,可以用 | 作为连字符。
package five;
public class five20 {
public static void main(String[] args) {
String str="a1b2,c,d e f|gh";//创建字符串,包含多种类型字符
String[] a1= str.split(",");// 使用“,”分割
String[] a2= str.split(" ");// 使用空格分割
String[] a3= str.split("\|");// 使用“|”分割
String[] a4= str.split("\d");// 使用正则表达式分割,本行用数字分割
//同时用“,”空格、“|”、数字分割,用符号“|”连接所有分隔符
String[] a5= str.split(",| |\||\d");
System.out.println("str的原值:["+str+"]");//显示str的原值
//使用for-each循环展示“,”分割的结果
System.out.print("使用","分割:");
for (String b:a1){
System.out.print("["+b+"]");
}
System.out.println(); //换行
//使用for-each循环展示空格分割的结果
System.out.print("使用空格分割:");
for (String b:a2) {
System.out.print("["+b+"]");
}
System.out.println();
// 使用for-each循环展示“!”分割的结果
System.out.print("使用"|"分割:");
for (String b:a3) {
System.out.print("["+b+"]");
}
System.out.println();
//使用 for-each循环展示数字分割的结果
System.out.print("使用数字分割:");
for(String b:a4){
System.out.print("["+b+"]");
}
System.out.println();
//使用for-each循环展示所有分隔符同时分割的结果
System.out.print("同时使用所有分隔符:");
for (String b:a5) {
System.out.print("["+b+"]");
}
System.out.println();
}
}
split(String regex, int limit)
limit为分割份数
4.大小写替换 toLowerCase()
将字符串中的所有字符从大写字母改写为小写字母
toUpperCase()
将字符串中的所有字符从小写字母改写为大写字母
5.去除空白内容
trim()方法可以直接返回字符串的副本,忽略首尾处空白。
6.比较字符串是否相等 equals(String str)
将此字符串与指定的对象比较,区分大小写
equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写
7.格式化字符串
String 类中,可以使用 format() 方法格式化字符串,该方法有两种重载形:
format(String format, Object… args)使用本地语言环境,制定字符串格式和参数生成格式化的新字符串
format(Locale locale, String format, Object… args)使用指定的语言环境,制定字符串格式和参数生成格式化的字符串
日期和时间字符串格式化常用日期格式化转换符:
时间格式化转换符:
常见的日期和时间组合的格式:
转换符:
常规类型格式化
package five;
public class five32 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = String.format("%5d", 123); // 让字符串输出的最大长度为5,不足长度在前端补空格
System.out.println("输出长度为5的字符串|"+ str1 + "|");
String str2 = String.format("%-5d",123);// 让字符串左对齐
System.out.println("左对齐|"+str2+"|");
String str3 = String.format("%#o",33);//在8进制前加一个0
System.out.println("33的8进制结果是:"+str3);
String str4 = String.format("%#x",33);// 在16进制前加一个0x
System.out.println("33的16进制结果是:"+str4);
String str5 = String.format("%+d",1);// 显示数字正负号
System.out.println("我是正数:"+str5);
String str6 = String.format("%+d",-1);//显示数字正负号
System.out.println("我是负数:"+str6);
String str7 = String.format("% d", 1); // 在正数前补一个空格
System.out.println("我是正数,前面有空格"+str7);
String str8 = String.format("% d", -1); // 在负数前补一个负号
System.out.println("我是负数,前面有负号"+str8);
String str9 = String.format("%05d",12);// 让字符串输出的最大长度为5,不足长度在前端补0
System.out.println("前面不够的数用0填充:"+ str9);
String str10 = String.format("%,d",123456789);// 用逗号分隔数字
System.out.println("用逗号分隔:"+ str10);
String strll = String.format("%(d", 13);// 正数无影响
System.out.println("我是正数,我没有括号:"+strll);
String str12 = String.format("%(d",-13); // 让负数用括号括起来
System.out.println("我是负数,我有括号的:"+str12);
}
}
5.5 可变字符串 1.StringBuffer类的常用方法 append(String str)方法
在字符串末尾追加字符串。
setCharAt(int index, char ch)方法将当前字符串中下标为index位置的单个字符删除。
insert(int offset, String str)方法
插入字符串并返回调用对象的引用,就是自己。
reverse()方法
字符串反转。
delete(int start,int end)方法
删除字符串。
其他方法
2.StringBuilder类的使用方法
StringBuilder类与StringBuffer类具有兼容的API,所以两者的使用方法也相同。
3.StringBuffer、StringBuilder、String之间的关系 StringBuffer、StringBuilder、String互相转换
package five;
public class five40 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "string";
StringBuffer sbf =new StringBuffer(str); // String转换成StringBuffer
StringBuilder sbd =new StringBuilder(str); // string转换成StringBuilder
str=sbf.toString();// stringBuffer转换成String
str = sbd.toString();// stringBuilder转换成string
StringBuilder bufferToBuilder = new StringBuilder(sbf.toString());
//String Buffer转换成StringBuilder
StringBuffer builderToBuffer = new StringBuffer(sbd.toString());
//String Builder 转换成stringBuffer
}
}
StringBuffer、StringBuilder、String的不同之处
String 是字符串常量, StringBuffer 和 StringBuilder 是字符串变量。 StringBuffer 是线程安全的, StringBuilder 是非线程安全的。 具体来说 String 是一个不可变的对象,每次修改 String 对象实际上是创新新对象,并将引用指向新对象。



