String类重点知识:
是final类
构造方法参数,可以是byte数组,char数组 int数组 String StringBuffer,StringBuilder
String类包括的方法可用于检查序列的单个字符,比较字符串,提取子字符串,创建字符串副本并将所有字符转换成大小写
charAt(index i)返回指定索引处的char值
compareTo()按照字典顺序比较两个字符串
Concat(String s)将指定字符串连接到此字符串的结尾
Contains(s)当且晋档此字符串包含指定的char值 返回true
Endswith(s)测试此字符串是否是以指定的后缀结束
Equals()
indexOf()
isEmpty()
Length()
Matches()
toCharArray()
valueOf()
第二次
String str1=new String(“abc”);
String str2=”abc”;
虽然两个语句都是返回一个S听对象的引用,但是java对两者的处理方式不是一样的,对于第一种,java会马上在heap中创建一个String对象,然后将对该对象的引用返回给用户;对于第二种,java首先会在内部维护的String pool中通过String的equals方法查找对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户;使用第一种方法创建对象时,jvm是不会主动把改对象放到String pool里面的,除非程序调用SString的intern方法;
String类是字符串常量,是不可更改的常量,StringBuffer是字符串变量,对象是可以扩充和修改的StringBUilder一个可变的字符序列,但是不保证同步,该类被设计成StringBuffer的一个简易替换,用在字符串缓冲区,建议先采用该类,比StringBuffer要快
关于字符串的长度:等于字符串中unicode代码单元的数量
需要计算的是字节的长度:utf-8一个汉字是三个字节 GBK,GB2312的汉字占两个字节,ISO8859-1无法表示汉字,转向为问号;
计算一个字符是占用几个字节
先将该字符转换成String类型
String s=Character.toString(char c);
s.getBytes.length;
S.getBytes(“utf-8”).length
面试题:通过字节长度截取字符串;例如:我的Abc 取前三个字节,因为汉字占用两个字节,希望取出来是我的 而不是一个半汉字;
package test;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
public class StringTest {
public static void main(String[] args) throws UnsupportedEncodingException{
String str="我的Abc中国";
System.out.println(mySubString(str,6));
}
public static String mySubString(String s,int byteLen) throws UnsupportedEncodingException {
StringBuilder sb=new StringBuilder();
char[] charStr=s.toCharArray();//转换为char数组
for(int i=0,j=0;i<charStr.length&&j<byteLen;i++) {
//将char字符转成string然后计算计算字符所占用的字节数
String temp=Character.toString(charStr[i]);
int len= temp.getBytes("GBK").length;
System.out.println(len);
if(len<2) {
j++;
}else {
j=j+2;
}
System.out.println(j);
sb.append(temp);
}
return sb.toString();
}
}