黑马程序员--String类

来源:互联网 发布:apache event 优化 编辑:程序博客网 时间:2024/06/04 20:11

黑马程序员--String类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

String类

一、定义

String类:用于描述字符串事物的类。

二、特点

1、字符串是一个特殊的对象;
2、一旦初始化就不可以被改变,相同字符串不会被重复创建;
3、String类复写了Object中equals方法,用于比较字符串内容是否相同,不比较地址;
4、String s1 = "abc";(s1是一个类类型变量,"abc"是一个对象)和String s2 = new String("abc");区别:
s1在内存中有一个对象;s2在内存中有两个对象new、"abc"。

三、常见功能

一个对象的功能一般有四部分:增、读、改、删(C create R read U update D delete)。
1、获取
1.1 int length():获取字符串的长度(个数)。 
1.2 char charAt(int index):根据位置获取字符。 
1.3根据字符获取该字符在字符串中的位置
int indexOf(int ch):返回指定字符在字符串中第一次出现的索引(位置)。
int indexOf(int ch,int fromIndex):从指定的索引处开始,获取指定字符在字符串中出现的索引。
int indexOf(String str):返回第一次出现的指定子字符串在此字符串中的索引。
int indexOf(String str,int fromIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
int lastIndexOf(int ch):返回最后一次出现的指定字符在此字符串中的索引。
1.4获取字符串中一部分字符串(子串)。
String substring(int beginIndex):从指定位置开始到结尾,如果角标不存在,会出现字符串角标越界异常。
String substring(int beginIndex,int endIndex):含头不含尾。
//字符串中,返回-1代表被访问字符串中没有标的字符(串)。class StringGet{public static void get(){String str = "abcdafg";//获取长度(个数)sop(str.length());//根据索引获取字符。当访问到字符串中不存在的角标时会发生:StringIndexOutOfBoundsException。sop(str.charAt(4));//返回字符第一个出现索引(位置)。sop(str.indexOf('d'));//根据字符从指定索引开始,获取目标索引。sop(str.indexOf('t',3));//返回自字符串索引。sop(str.indexOf("fg"));//从指定索引开始,返回首次出现的字符串索引。sop(str.indexOf("da",3));//索引一个字符最后出现的索引。sop(str.lastIndexOf('a'));//获取字符串中的一部分字符串(子串)。sop(str.substring(3));sop(str.substring(3,5));}public static void main(String[] args){get();}public static void sop(Object obj){System.out.println(obj);}}
运行结果:

2、判断
boolean contains(String str):字符中是否包含某一个字符串。
indexOf()用if(str.indexOf("aa")!=-1)语句,既可以判断,又可以获取出现的位置。
boolean isEmpty():字符中是否有内容。原理就是判断长度是否为0。
boolean startsWith(str):字符串是否以指定内容开头。
boolean endsWith(str):字符串是否以指定内容结尾。
boolean equals(str):判断字符串内容是否相同。
boolean equalsIgnoreCase():判断内容是否相同,并忽略大小写。

class StringJudge{public static void judge(){String str = "ArrayDemo.java";//判断文件名称是否包含Demo。sop(str.contains("Demo"));//用indexOf()判断sop(str.indexOf("rra")!=-1);//是否为空字符sop(str.isEmpty());//判断文件名称是否以Array单词开头。sop(str.startsWith("Array"));//判断文件名称是否是.java的文件。sop(str.endsWith(".java"));String str1 = "ARRAYDEMO.JAVA";//判读是否有相同内容sop(str1.equals(str));//忽略大小写sop(str1.equalsIgnoreCase(str));}public static void main(String[] args) {judge();}public static void sop(Object obj){System.out.println(obj);}}
运行结果:

3、转换
3.1将字符数数组转成字符串
构造函数 String(char[]){}
String(char[],offset,count) 将字符数组中的一部分转成字符串。
静态方法 

static String copyValueOf(char[] date):返回指定数组中表示该字符序列的字符串。
static String copyValueOf(char[] data,int offset,int count);
static String valueOf(char[] date):返回指定数组参数的字符串表示形式。
3.2将字符串转成字符数组
char[] toCharArray();
3.3将字节数组转成字符串
String(byte[]);
String(byte[],offset,count):将字节数组中的一部分转成字符串。
3.4将字符串转成字节数组
byte[]  getBytes();
3.5将基本数据类型转成字符串(此处都是String的方法,首单词要小写)
static String valueOf(int) 
static String valueOf(double) 
3+""==String.valueOf(3)
特殊:字符串和字节数组在转换过程中是可以指定编码表的。
3.6将字符串转成大写或小写
String toUpperCase();
String toLowerCase();
3.7将字符串两端的多个空格去除
String trim();

//因为调用了String类,所以要导入对应包。import java.lang.String.*;class StringTransform{public static void transform(){char[] arr = {'a','b','c','d','e','f'};//从角标1开始,获取三个字符。String s = new String(arr,1,3);sop("s="+s);//返回指定数组中表示该字符序列的字符串String str1 = String.copyValueOf(arr);sop("str1="+str1);//返回指定数组参数的字符串表示形式。String str2 = String.valueOf(arr);sop("str2="+str2);String s1 = "afegvfee";//字符串转字符数组char[] chs = s1.toCharArray();for(int x=0; x<chs.length;x++){System.out.print(("ch="+chs[x]+"  "));}System.out.println();byte[] bt1 = {1,2,3};//将字节数组转成字符串String str3 = new String(bt1);sop("str3="+str3);//字符串转字节数组byte[] bt2 = s1.getBytes();for(int x=0; x<bt2.length;x++){System.out.print(("by="+bt2[x]+"  "));}System.out.println();//将基本数据类型转成字符串String str4 = String.valueOf(20);sop("str4"+str4+(3+""==String.valueOf(3)));String str5 = "    Hello Java     ";sop(str5.toLowerCase());sop(str5.toUpperCase());sop(str5.trim());}public static void main(String[] args) {transform();}public static void sop(Object obj){System.out.println(obj);}}
运行结果:

4、其他功能

4.1替换 
String replace(char oldCh,char newCh):建立一个新字符串。
String replace(String s1,String s2);
若未找到替换内容,则返回原字符串。
4.2切割 
String[] split(regex);涉及都正则表达式(正则表达式就是字符串的使用的快捷方式)。
4.3对两个字符串进行自然顺序的比较
int compareTo(string):按字典顺序比较两个字符串。

class StringOthers{//注意命名要防止和方法重名public static void method_replace(){String s = "hello java";//建立一个新字符串,旧字符串一旦建立不能被改变。String s1 = s.replace('a','n');//如果要替换的字符不存在,返回原串。String s2 = s.replace('q','n');//替换部分字符串。String s3 = s.replace("java","world");sop("s="+s);sop("s1="+s1);sop("s2="+s2);sop("s3="+s3);}public static void method_split(){String s = "zhangsan,lisi,wangwu";//依据","进行切割String[] arr = s.split(",");for(int x=0;x<arr.length;x++){System.out.print((arr[x]+" "));}//换行System.out.println();}public static void method_compare(){String s1 = "bcz";String s2 = "bcd";//按字典顺序比较两个字符串。//若字符串相同,返回0;若s1>s2,返回正数;s1<s2,返回负数;sop(s1.compareTo(s2));}public static void main(String[] args) {method_replace();method_split();method_compare();}public static void sop(Object obj){System.out.println(obj);}}
运行结果:

StringBuffer

一、定义

StringBuffer:是字符串缓冲区,用于存储数据的容器。 

二、特点

1、长度可变化; 
2、可以存储不同类型数据; 
3、最终要转成字符串才能使用。

三、优点

StringBuffer可对字符串修改;string类一旦建立无法修改。

PS:
StringBuffer的字符串缓冲区初始容量为16个字符,其实质还是数组。

四、常见功能

1、添加:
StringBuffer append(date):将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,date):可以将数据插入到指定index位置。
2、删除
StringBuffer delete(int start,int end):删除缓冲区中的数据,含头不含尾。
StringBuffer deleteCharAt(int index):删除指定位置的字符。
3、获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end)
4、修改
StringBuffer replace(int start,int end,String str);
void setCharAt(int index,char ch);
5、反转
StringBuffer reverse();
6、其他方法
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):将缓冲区中指定数据存储到指定字符数组中。
src:源 dst:目的
void setLength(int newLength):设置字符序列的长度

class StringBufferDemo{public static void method_add(){StringBuffer sb = new StringBuffer();//sb添加后并使sb1指向的是同一个对象,故sb==sb1。StringBuffer sb1 = sb.append(34);sop("sb==sb1:"+(sb==sb1));//方法调用链,返回字符串链。sb.append("ass").append(true).append(34);sop("sb="+sb);//将数据插入到指定7上。sb.insert(7,"qq");sop(sb.toString());}public static void method_del(){StringBuffer sb = new StringBuffer("abcdf");sb.delete(1,3);//清空缓冲区//sb.delete(0,sb.length());//删除一个字符的用法。跟sb.delete(1,2);效果相同。sb.delete(1,1);无效。//sb.deleteCharAt(2);sop(sb.toString());}public static void method_update(){StringBuffer sb = new StringBuffer("abcdf");//sb.replace(1,3);sb.setCharAt(2,'K');//voidsop(sb.toString());}public static void main(String[] args){method_add();method_del();method_update();}public static void sop(String str){System.out.println(str);}}
运行结果:

PS:

1、使用setLength设置StringBuffer中字符序列的长度。
如果小于已有字符序列的长度,多余部分将被清除;如果大于,多余部分用空字符填充。
2、当创建的StringBuffer内容长度大于16,将会创建一个较长的新数组。
也可以通过StringBuffer(int capacity);构造函数自己设置StringBuffer缓冲区长度。

五、StringBuilder

StringBuilder是JDK1.5版本后StringBuffer的替代品。StringBuilder用法和StringBuffer完全一样。

区别:
StringBuffer是线程同步的,通常用于多线程。在添加时,不能做其他操作。但单线程时效率低。
StringBuilder是线程不同步。开发中建议使用StringBuilder。因为不用同步,效率高,但是多线程时不安全。

PS:
一、升级三个要素:提高安全性、提高效率、简化书写;
二、基本数据类型对象包装类:把基本数据类型封装成对象,便于操作。

2、常见操作:基本数据类型和字符串类型之间的转换。
2.1将基本数据类型转成字符串。
a.基本数据类型+"";
b.基本数据类型.toString(基本数据类型值);
例:Integer.toString(34); //将34整数转换成"34"。
2.2将字符串转成基本数据类型
a.静态转换方法:xxx a = Xxx.parseXxx(String);
例:int a = Integer.parseInt("a123");//NumberFormatException。必须传入数字格式的字符串
b.非静态:
Integer i = new Integer("123");
int num = i.intaValue();
3、常见方法
3.1十进制转成其他进制:
toBinaryString();
toHexString();
toOctalString();
3.2其他进制转成十进制:
parseInt(string,radix);radix:要转的进制数,string:标的字符串。
例:int x = Integer.parseInt("3c",16);///~60

class IntegerDemo{public static void sop(String str){System.out.println(str);}public static void main(String[] args){//基本数据类型转字符串String s = 10 + "";sop(s);sop(Integer.toString(34));//将一个字符串转成整数(静态方法)。//int num = Integer.parseInt("a23");//NumberFormatException。必须传入数字格式的字符串double b = Double.parseDouble("12.23");sop("double="+b);//非静态方法Integer i = new Integer("123");sop("i="+i);//常用方法://整数类型的最大值sop("int max :"+Integer.MAX_VALUE);//十进制转二进制:sop(Integer.toBinaryString(-6));//十进制转十六进制sop(Integer.toHexString(60));//其他进制转成十进制:int x = Integer.parseInt("3c",16);//括号里是(原数据,要转变的原数据进制);sop("x="+x);}}
运行结果:

三、JDK1.5版本后的2个新特性:
1、Integer x = 4;//自动装箱
2、当数值在byte范围内时,如果该数值已经存在,则不会再开辟新的空间。

0 0
原创粉丝点击