前言:java中String类是一个经常使用到的类,我们不能只了解它的简单的几个用法,要熟悉它的各种方法,做到信手拈来,灵活自如!
一.String的特点简介:
String str="abc"; //str是一个类型变量,"abc"是一个对象;
str="kk"; //"abc"对象内容并没有变化,"abc"内存还在,只不过是str指向"kk";
String s1="abc", String s2=new String("abc"); s1和s2有什么区别?
s1在内存中有一个对象;s2在内存中有两个对象;
二.String的方法:(这里只是简单列出比较常用的方法,要多看java的API练习即可)
1.获取
1.1字符串中包含的字符数,也就是字符串的长度。
int length():获取长度 注:字符串求长度的length是方法,有括号;字符串数组求长度的length是属性,没括号;
1.2根据位置获取位置上某个字符。
1.4int lastIndexOf(String str):反向索引。
2.判断
2.1字符串中是否包含某一个子串。
boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现为止,如果返回-1,表示该str不在字符串中存在。
所以,也可以用于对指定判断是否包含。
if(str.indexOf("a")!=-1)
而且该方法既可以判断,也可以获取出现的位置。
2.2字符串中是否有内容。
boolean isEmpty():原理就是判断长度是否为0。
2.3字符串是否以指定内容开头。
boolean startsWith(str);
2.4字符串是否以指定内容结尾。
boolean endsWith(str);
2.5判断字符内容是否相同,复写了object类中的equals方法。
boolean equals(str);
2.6判断内容是否相同,并忽略大小写。
boolean equalsIgnorecase();
3.转换。
3.1将字符数组转成字符串。
构造函数:String(char[])
String(char[],offset,count):将字符数组中的一部分转成字符串
静态方法:
static String copyValueOf(char[]);
static String copyValueOf(char[] data,int offset,int count);
static String valueOf(char[]);
3.2将字符串转成字符组
char[] tocharArray();
3.3将字节数组转成字符串。
String(byte[])
String(byte[],offset,count):将字节数组中的一部分转成字符串
3.4将字符串转成字节数组。
byte[] getBytes()
3.5将基本数据类型转成字符串,
static String valueOf(int)
static String valueOf(double)
// 3+"" 与 String.valueOf(3)的值是一样的
特殊:字符串和字节数组在转换过程中,是可以指定编码的。
4.替换
String replace(oldchar,newchar);
5.切割
String[] split(String regex); //根据给定正则表达式的匹配拆分此字符串。
6.子串。获取字符串中的而一部分
String subString(begin);
String subString(begin,end); //包含头,不包含尾
7.转换,去除空格,比较。
7.1将字符串转成大写或小写
String toUpperCsae() 大转小
String toLowerCsae() 小转大
7.2将字符串两端的多个空格去除
String trim();
7.3对两个字符串进行自然顺序的比较
int compareTo(String str);
compareToIgnore(String str); 忽略大小写比较
三. String池
public class StringTest { public static void main(String args[]) { //在池中和堆中分别创建String对象"abc",s1指向堆中对象 String s1 = new String("abc"); //s2直接指向池中对象"abc" String s2 = "abc"; //在堆中新创建"abc"对象,s3指向该对象 String s3 = new String("abc"); //在池中创建对象"ab" 和 "c",并且s4指向池中对象"abc" String s4 = "ab" + "c"; //c指向池中对象"c" String c = "c"; //在堆中创建新的对象"abc",并且s5指向该对象 String s5 = "ab" + c; String s6 = "ab".concat("c"); String s7 = "ab".concat(c); System.out.println("------------实串-----------"); System.out.println(s1 == s2); //false System.out.println(s1 == s3); //false System.out.println(s2 == s3); //false System.out.println(s2 == s4); //true System.out.println(s2 == s5); //false System.out.println(s2 == s6); //false System.out.println(s2 == s7); //false String b1 = new String(""); String b2 = ""; String b3 = new String(""); String b4 = "".intern(); String b5 = "" + ""; String b6 = "".concat(""); String b7 = " ".trim(); String b8 = " "; String b9 = " ".trim(); System.out.println("------------空串-----------"); System.out.println(b1 == b2); //false System.out.println(b1 == b3); //false System.out.println(b2 == b3); //false System.out.println(b2 == b4); //true System.out.println(b2 == b5); //true* System.out.println(b2 == b6); //true* System.out.println(b2 == b7); //false* System.out.println("-----a----"); System.out.println(b2.equals(b7)); //true System.out.println(b7 == b8); //false System.out.println(b7 == b9); //false System.out.println(b7.equals(b9)); //true System.out.println(b9 == null);//false System.out.println("b8.trim():"); for (byte b : b8.getBytes()) { System.out.print(">>>" + (int) b + " "); } System.out.println("\nb8.trim():"); for (byte b : b8.trim().getBytes()) { System.out.print(">>>" + (int) b + " "); } System.out.println("\nb9.trim():"); for (byte b : b9.trim().getBytes()) { System.out.print(">>>" + (int) b + " "); } } }