您的位置:首页 > 职场人生

黑马程序员--String类

2015-11-06 15:16 393 查看
黑马程序员--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');//void
sop(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范围内时,如果该数值已经存在,则不会再开辟新的空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: