String类
- String s1=“abc”;s1里面保存的不是“abc”字符串,s1里面保存的是“abc”字符串对象的内存地址
- 字符串的定义
private static void f1() throws UnsupportedEncodingException { String s1="java程序设计"; String s2=new String("java程序设计"); String s3=new String();//字符串为空 System.out.println(s3.length());//0 System.out.println(s1.length());//8 System.out.println(s1.getBytes().length);//不确定 utf-8一个汉字3个字节,gbk一个汉字2个字节 //utf-8 16 String s4=new String( s1.getBytes() );//字节数组转换成字符串 //字符数组--》字符串 char [] cArray={ 'a','b','c','d'}; String s5=new String(cArray); String s52=new String(cArray,1,2);//bc System.out.println(s52); //字符串--》字符数组 char[]cArray2= s1.toCharArray(); //字节数组转换为字符串,可以指定编码 String s6= new String(s1.getBytes(),"gbk"); System.out.println(s6); }
- subString方法
//subString提取身份证号中的出生日期,判断性别 private static void f3() { String s="123456";//"411301200010230123"; String s2=s.substring(1, 3);//位置从0开始,获取子串包含开始位置字符,不包含结尾位置字符 System.out.println(s2); String s3="411301200010230123"; System.out.println("出生日期"+s3.substring(6, 14) ); String sex=s3.substring(16,17); System.out.println(sex); //字符串-->数值转换方法 int sex1=Integer.parseInt(sex); int sex2=Integer.valueOf(sex); if(sex1%2==0){ System.out.println("女生");} else System.out.println("男生"); }
4.将任意类型转换为字符串类型
private static void f1() { double d=3.14; //String s2=d; String s2=String.valueOf(d); System.out.println(s2.length()); char[] c={ 'a','b','c','d'}; String s3=String.valueOf(c); System.out.println(s3);//abcd String s4=String.valueOf(c, 1, 2); System.out.println(s4);//bc //2 功能与valueOf类似,实现将字符数组转换为字符串 char[] c2={ 'a','b','c','d'}; String s5=String.copyValueOf(c2); System.out.println(s5); }
5.String.format 显示正号用%+ ,%d整数 , %f实数 , %c字符, %s字符串 , %x十六进制 , %o八进制, %e指数格式, %g指数格式; //显示正号用%+ ,%-左对齐 默认右对齐
private static void f2() {
int a=10;
String s6=String.format("%d%+d%-5d***", a,a,a);
System.out.println(s6);//10+1010 ***
double d2=123.456789;
String s7=String.format("%f,%e,%g,%9.2f,%+-9.2f", d2,d2,d2,d2,d2);
System.out.println(s7);//123.456789,1.234568e+02,123.457, 123.46,+123.46
//%2$ 后边的第几个参数
String s8=String.format("%2$+d,%1$-10d", a,123456);
System.out.println(s8);//+1234356,10 (8个空格)
Date date=new Date();
String s9=String.format("%tY--%1$tm--%1$td--%1$tH--%1$tM--%1$tS", date);
System.out.println(s9);//2020--11--03--15--04--48
String s10=String.format("%tF--%1$tT", date);
System.out.println(s10);//2020-11-03--15:06:40
}
6.String类的charAt()方法,codePointAt()方法,比较方法,连接concat()、替代replaceAll()、包含contains();endsWith();startsWith();
public static void main(String[] args) {
String s1="abcdefg";
//1字符串中某个位置对应的字符
char c=s1.charAt(3);//d
System.out.println(c);
//char c2=s1[3];//没有这样的格式
//2对应位置的asc码值
int i=s1.codePointAt(3);
System.out.println(i);//d的asc码 100
//3比较,返回值int 0相等 >0当前字符串大 <0当前字符串小 按照字典顺序
//compareToIgnoreCase比较的同时忽略大小写。验证码比较一般就可以忽略大小写
System.out.println(s1.compareTo("abcc"));//>0 1
System.out.println(s1.compareTo("ABCC"));//>0 32
System.out.println(s1.compareToIgnoreCase("ABCC"));//>0 1
//相等比较的方法三个
if(s1.compareTo("abcdefg")==0)System.out.println("相等");
if(s1.equals("abcdefg"))System.out.println("相等");
if(s1.contentEquals("abcdefg"))System.out.println("相等");
//4 连接,替代,原字符串没有发生改变,可以将结果赋值给另外一个串
s1="abcdefg";
s1.concat("1234");
System.out.println(s1);//abcdefg
s1="abcdefg";
s1=s1.concat("1234");
System.out.println(s1);//abcdefg1234
s1="abcdefg";
s1.replaceAll("bcd", "123");
System.out.println(s1);//不变,abcdefg
s1="abcdefgabcdefgabcdefg";
s1=s1.replaceAll("bcd", "12");//
System.out.println(s1);//a12efga12efga12efg
s1="abcdefgabcdefgabcdefg";
s1=s1.replaceFirst("bcd", "123");
System.out.println(s1);//a123efgabcdefgabcdefg
s1="abcdefgabcdefgabcdefg";
s1= s1.replace('a', ',');
System.out.println(s1);//,bcdefg,bcdefg,bcdefg
//按照规则替代
//s1.replaceAll(regex, replacement)
s1="i love Java!i love data Structure.";
String s2=s1.replaceAll("[,.! ?]", "");//去掉所有的标点
System.out.println(s2);//iloveJavailovedataStructure
System.out.println(s1.length()-s2.length());
//5包含
s1="abcdefg";
System.out.println(s1.contains("bcd"));//true
System.out.println(s1.endsWith("fg"));//true
System.out.println(s1.startsWith("ab"));//true
//6将字符串转换为字节数组
byte[]bytes=s1.getBytes();
//7indexOf找到》=0,没有找到-1 查找字符或者字符串
s1="abcdefgabcdefgabcdefg";
System.out.println(s1.indexOf('a'));//0
System.out.println(s1.indexOf('c'));//2
System.out.println(s1.indexOf('x'));//-1
System.out.println( s1.lastIndexOf("abc"));//14
char[]cc=s1.toCharArray();//字符串转为字符数组
s1=s1.toLowerCase();//转为小写字母
s1=s1.toUpperCase();//转为大写字母
}
7、String类的getBytes()方法
public static void main(String[] args) throws UnsupportedEncodingException {
//汉字个数
String s = "fghshagfhhs程序设计fhasjfj开发发生绝地反击发货8534858fhsdhf,,.";
String regex1 = "[\u4e00-\u9fa5]";
//String s1=s.replaceAll(regex1, "");;
//System.out.println(s1);
System.out.println("汉字个数:" + (s.length() - s.replaceAll(regex1, "").length()));//汉字个数:14
System.out.println("汉字个数:" + (s.replaceAll(regex1, "12").length() - s.length()));//汉字个数:14
//utf-8编码一个汉字3个字节,gbk编码一个汉字2个字节
System.out.println(s.getBytes().length);//76
System.out.println(s.length());//48
//字符转换为字节之后字节最高位是0也就是正数,但是汉字转换为字节编码之后最高位是1也负数
int count = 0;
byte[] bytes = s.getBytes();
for (byte bb : bytes) {
if (bb > 0) count++;
}
//count存储的是字符个数,不含汉字
System.out.println("汉字个数:" + (s.length() - count));//汉字个数:14
System.out.println("汉字个数:" + (s.getBytes("GBK").length - s.length()));//汉字个数:14
System.out.println("汉字个数:" + (s.getBytes("utf-8").length - s.length()) / 2);//汉字个数:14
}