1.Java中String的常规用法
String c_str;
字符串连接(注意事项):
使用 “+”,会将所有的变量转成String
例子:
String c_str = "abc";
char ch = 'A'; //ascii 为 65
int x = 1;
System.out.println(c_str + ch + x); // "abcA1"
System.out.println(x + ch + c_str ); // "66abc"
System.out.println(x + c_str + ch); // "1abcA"
低会转成高输出,Java中基础类型为int,byte + char 最后结果为int
字符串内容判断:
boolean c_str.isEmpty();
如果字符串为空返回true,否则为false
字符串长度:
int c_str.length();//返回字符串的长度
字符串的比较(包含字符大小写)(int):
c_str.compareTo(String x_ctr );
//如果x_ctr == c_str 返回0,x_ctr 为空,返回c_str长度
//如果x_ctr < c_str返回正数,否则返回负数
返回的值是从开头后的不匹配的第一个字符的差值
例子:
String c_str = "ABC123"; //A的ascii码65
String x_ctr = "AAC";
int i = c_str.compare(x_ctr);
System.out.println("差值:" + i);
输出:1(字符串不相等,'B' - 'A' = 1)
字符串的比较(与字符大小写无关):
c_str.compareToIgnoreCase(String x_ctr);
字符串的连接:
(1)c_str “+” x_str
(2)c_str.concat(String x_str)
将String x_str连接到c_str的后面,返回String
字符包含另外字符串:
boolean c_str.contains(String x_str);
如果字符串c_str包含x_str,返回true,否则为false
字符串相等(匹配)判断:
boolean c_str.content_Equals(String x_str);
boolean c_str.matches(String x_str);
如果字符串c_str字符和x_str字符一样,返回ture,否则为false
判断字符串的末尾:
boolean c_str.endsWith(String x_str);
如果字符串c_str的末尾是以x_str结尾,则返回true,否则false(有字符大小写之分)
字符串的比较(boolean):
boolean c_str.equals(String x_str);
boolean c_str.equalsIgnoreCase(String x_str); //忽略字符大小写
若c_str中的字符与x_str相同,返回true,否则为false
equals比较的是对象中的字符,不包含对象
而 "==" 则是比较对象是否引用的是两个实例
String X1 = "test";//创建一个“test”对象,并将"test”放置在StringPool中
String X2 = "test";//检查StringPool中是否存在"test",因为已经存在,所以X2引用相同的String,指向同一位置
String s = new String("hello world");//创建了两个对象
“hello world”已经是String类型,相当于“hello world”本来创建了一个对象放置在StingPool中,然后又new String创建另一个对象(多余)
首先在StringPool中创建"hello world"的字符串(第一个对象),通过字符串构造函数new String()在堆上创建String对象(第二个对象),s将会引用这个String
String S1 = new String("hello"); //创建一个对象
String S2 = new String("hello"); //再创建一个对象
S1和S2属于不同对象,在不同的堆上,S1 == S2 返回false ,S1.equals(S2)返回true
String转byte数组:
byte[] c_str.getBytes();
将String c_str转成byte数组
例子:
c_str = "0123";
byte[] B;
B = c_str.getBytes();
System.out.println("B[0]的字节:" + B[0]);
输出:B[0]的字节:48(0的Ascii为48)
byte数组转String:
String c_str = new String(byte[]);
将byte[]数组转成String
例子:
byte[] b = new byte[]{'1','2','a','b'};
String c_str = new String(b);
System.out.println("转换后字符串为:" + c_str);
输出:转换后字符串为:12ab
附加(统计数组中元素个数):
int[] A;//声明整型数组
int[] A = new int[count];//创建不初始化数组,需要指定大小
int[] a = new int[]{1,2,3,4,5};//创建并初始化数组
int len = a.length;//没有()
输出:len = 5
字符串中提取单个字节:
c_str.charAt(int index); //获取的是c_str中第index的字符(下标从0开始)
字符串中设置单个字节:
c_str.setCharAt(int index,char ch); //设置c_str中第index的字符(下标从0开始)
字符串的截取(多个字节,返回字符数组):
void c_str.getChars(int start_source,int end_source,char x[],int start_target);
start_source为原字符串的截取启始位置
end_source为原字符串的截取结束位置
char x[]为存放截取字符串的字符数组
start_target为截取后字符从字符数组下标开始存放
例子:
String c_str = "abcdef123"; //字符长度为9
char[] x = new char[c_str.length()];
c_str.getChars(1,5,x,0);
字符数组x中:x[0] = 'b',x[1] = 'c',x[2] = 'd',x[3] = 'e',x[4] = '';
从原String中取4个字符,下标1,2,3,4(b,c,d,e)
字符串的截取(多个字节,返回String):
String c_str.substring(int begin,int end);
截取字符串c_str中从begin下标到end下标的字符
例子:
String c_str = "abcdef123";
String x = c_str.substring(1,4);
结果:x = “bcd”
获取字符串的哈希码:
int c_str.hashCode();
返回c_str的哈希码
字符串查找位置:
int c_str.indexOf(String x_str);//可以传递char字符char x_char
查找x_str在c_str的首次出现的位置下标,找不到就返回-1
例子:
String c_str = "abcdefg";
String x_str = "cd";
int index = c_str.indexOf(x_str);
System.out.println("x_str第一次出现在c_str的位置:" + index);
输出:x_str第一次出现在c_str的位置:2
int c_str.indexOf(String x_str,int index);//可以传递char字符char x_char
从index下标开始搜索并返回x_str在c_str出现的位置(下标不变,搜索启始位置从0变成index)
int c_str.lastIndexOf(String x_str);//返回字符x_str在c_str最后出现的位置
int c_str.lastIndexOf(String x_str,int index);//从下标index找x_str在c_str出现的最后位置
字符串联重复:
String c_str.repeat(int count);
String x = c_str.repeat(2);//将c_str重复2次组成一个String
字符串中字符的替换:
String c_str.replace(char oldchar,char newchar);//可以传递String和char
将字符串中某个字符用新字符全部替换
String c_str.replaceAll(String old,String new);//只能传递String,支持正则表达式
将字符串中某个子字符串用新字符串全部替换
String c_str.replaceFirst(String old,String new);
将字符串中第一次出现的字符串替换
String c_str = "ABCDEA";
String x = c_str.replace('A','a');// x = "aBCDEa";
String x = c_str.replace("AB",“ab”);// x = "abCDEA";
常用正则表达式:
"\\d" 匹配所有的整数
"<.*>" 匹配字符串中从"<"开始到最后一个">"结束之间的内容
"<.*?>"匹配字符串中从"<"开始到最近">"结束之间的内容,如果有两个<>,则将两个分别替换成对应的字符串
“[A-Z]”替换字符串中大写字母
“\\w”替换A-Z,a-z,0-9的字符
一般字符替换最好使用replce(),性能更优
字符串开头判断:
boolean c_str.startWith(String x_str);
如果c_str的开始以x_str字符串开始,返回true,否则为false
boolean c_str.startWith(String x_str,int index);
如果从Index下标开始,c_str以x_str开始则返回true
字符串字符大小写转换:
String c_str.toLowerCase();//字符串转小写
String c_str.toUpperCase();//字符串转大写
字符串去除前面和末尾空格:
String c_str.trim();//删除字符串前面和末尾的空格
字符串之间用特定字符串连接:
String join(String connetstr,String str1,String str2);
例子:String c_str = "";//与c_str的字符串无关
c_str = c_str.join("---","abc","def");
System.out.println("c_str字符串:" + c_str);
输出:c_str字符串:“abc---def”;
备注:与c_str无关,且如果只有一个字符“abc”和连接字符,只会输出字符“abc”
字符串截取多个字符串:
String[] split(String x);
以字符串x作为划分,分成多个字符串
例子:
String c_str = "ABC;123;DEF;456";
String[] end_str; //字符串数组存放结果
String x = ";" ;//以;作为分隔字符串
end_str = c_str.split(x);
输出:end_str [0] = "ABC";
end_str [1] = "123";
end_str [2] = "DEF";
end_str [3] = "456";
备注:可以通过c_str.indexOf(";",index) != -1找到c_str中有count个";",new String[count+1]
字符串反转:
StringBuffer StringBuffer(c_str).reverse();
StringBuffer转String可以通过toString()的方式
例子:
String c_str = "hello";
c_str = new StringBuffer(c_str).reverse().toString();
新建一个StringBuffer,将c_str转成StringBuffer,再调用反转reverse(),最后通过toString()转成String
输出:c_str = "olleh"
字符串的插入:
StringBuffer StringBuffer(c_str).insert(int index,String x_str);//也可插入字符char ch
index需要插入的下标位置,x_str或者ch是插入的字符串或者字符
例子:
String c_str = "ABC";
c_str = new StringBuffer(c_str).insert(1,"12").toString();
输出:c_str = "A12BC"