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

黑马程序员:String类和StringBuffer类

2014-01-26 22:04 323 查看
Java语言除了基本类型之外的变量类型都是引用类型。
引用是得到对象的一种方式,是对象的地址,可以理解为简化的指针,但引用屏蔽了一些指针的基本操作,例如++ -- * ,防止程序员直接对地址进行操作。
Java中对象就是通过引用操作的。

java.lang.String类代表不可变的字符序列(使用lang包里的东西,不需要引用lang包)

class StringDemo
{
public static void main(String[] args)
{
String s1="abc";//s1是一个类类型变量,所以abc是一个对象
//字符串最大特点:一旦初始化就不可以被改变
String s2=new	 String("abc");
//s1和s2有什么区别?
//s1代表一个对象,s2有两个对象
System.out.println(s1==s2);
System.out.println(s1.equals(s2));//String类复写了Object类中的equals方法,该方法用于判断字符串是否相同
}
}

/*
String类适用于描述字符串事物,那么它提供了多个方法对字符串进行操作
常见的有:“abcd”
1、获取
1.1字符串中的保函的字符数,即字符串的长度。int length();获取长度
1.2根据位置获取位置上某个字符。char charAt(int index);
1.3根据字符获取该字符在字符串中的位置。
int indexOf(int ch);返回的是ch在字符串中第一次出现的位置。
int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置。

int indexOf(int str);返回的是str在字符串中第一次出现的位置。
int indexOf(int str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置。

int lastIndexOf(int ch);
2、判断
2.1字符串是否包含某一个子串
boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str步骤字符串中存在,
所以,也可以用于对指定判断是否包含。
if(str.indexOf("aaaa")!=-1)
该方法既可以判断又可以判断获取出现的位置。
2.2字符中是否有内容
boolean isEmpty();原来是判断字符串长度是否为0
2.3字符串是否是以指定内容开头
boolean startswith(str);
2.4字符串是否是以指定内容结尾
boolean endswith(str);
2.5判断字符串内容是否相同,复写了Object类中的equals方法
boolean equals(str);
2.6判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase();
3.转换
3.1将字符数组转成字符串
构造函数:String(char[])
String(char[],offset,count):将字符数组中的一部分转成字符串
静态方法:static String copyValueOf(char[]);
static String copyValueOf(char[] data,int offset,int count)
static String valueOf(char[]);
3.2将字符串转成字符数组
char[] toCharArray();
3.3将字节数组转成字符串
String(byte[])
String(byte[],offset,count):将字节数组中的一部分转成字符串
3.4将字符串转成字节数组
byte[] getBytes();
3.5将基本数据类型转成字符串
static String valueOf(int)
static String valueOf(double)

//3+"";//String.valueOf(3);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4.替换
String replace(oldchar,newchar);
5.切割
String[].split(regex);
6.子串,获取字符串中的一部分
String substring(begin);
String substring(begin,end);
7.转换、去除空格、比较
7.1将字符串转成大写或小写
String toUpperCase();
String toLowerCase();
7.2将字符串两端的多个空格去除
String trim();
7.3对两个字符串进行自然顺序的比较
int compareTo(string);
*/
class StringMethodDemo
{
public static void method_7()
{
String s="   jfkjd jdkfj fjd   ";
sop(s.toLowerCase());
sop(s.toUpperCase());
sop(s.trim());

String s1="abc";
String s2="aaa";
sop(s.compareTo(s2));
}

public static void method_sub()
{
String s="abcdefgh";
sop(s.substring(2));//从指定位置到结尾.如果角标不存在,会出现字符串角标越界异常
sop(s.substring(2,5));//包含头,不包含尾
//获取整个字符串s.substring(0,s.length());
}
public static void method_split()
{
String s="jdfa,fjkads,irj";
String[] arr=s.split(",");
for(int x=0;x<arr.length;x++)
{
sop(arr[x]);
}
}
public static void method_replace()
{
String s="hello world";
//		String s1=s.replace('e','g');//如果要替换的字符不存在,返回的还是原字符串
String s1=s.replace("world","java");
sop("s="+s);
sop("s="+s1);
}
public static void method_trans()
{
char[] arr={'a','b','c','d','e'};
String s=new String(arr);
sop("s="+s);
String s1="afagags";
char[] chs=s1.toCharArray();
for(int x=0;x<chs.length;x++)
{
sop("ch="+chs[x]);
}
}
public static void method_is()
{
String str="ArratDemo.java";
sop(str.startswith("Array"));//判断文件名称是否是Array单词开头
sop(str.endswith(".java"));//判断文件名称是否是.java的文件
sop(str.contains("Demo"));//判断文件名中是否包含Demo

public static void method_get()
{
String str="afgdfgff";
//长度
sop(str.length());
//根据索引获取字符
sop(str.charAt(4));//当访问到字符串中不存在的角标时会发生SrringIndexOutOfBoundsException。
//根据字符获取索引
sop(str.indexOf('f',2));//如果没有找到,返回值为-1
//反向索引一个字符出现位置
sop(str.lastIndexOf("a"));
//		System.out.println(str.length());
}
public static void main(String[] args)
{
method_7();
//		method_sub();
//       method_split();
//     method_replace();
//		method_trans();
//		method_is();
//		method_get();
//		String s1="abc";
//		String s2=new String("abc");
//		String s3="abc";

//		System.out.println(s1==s2);
//		System.out.println(s2==s3);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}


StringBuffer与String
 
StringBuffer和String类似,但StringBuffer可以对字符串对象进行修改
当修改时,不用另在堆里开内存,而是在原来的内存里添加修改的东西,StringBuffer是线程安全的。
/*
StringBuffer是字符串缓冲区,是一个容器,
特点:1.而且长度是可变化的2.可以字节操作多个数据类型3.最终会通过toString方法变成字符串
C create U update R read D delete
1.存储
StringBuffer append():将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(index,数据);可以将数据插入到指定位置
2.删除
StringBuffer delete(start,end);删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt(index);删除指定位置的字符
3.获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end)
4.修改
StringBuffer re
9354
place(start,end,string);
void setCharAt(int index,char ch);
5.反转
StringBuffer reverse();
6.void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)

JDK1.5版本之后出现了StringBuilder
StringBuffer是线程同步的(多线程),StringBuilder是线程不同步的(单线程)。
建议使用StringBuilder
升级三个因素
1.提高效率 2.简化书写 3.提高安全性
*/
class StringBufferDemo
{
public static void main(String[] args)
{
//		method_delete();
//		method_update();
StringBuffer sb=new StringBuffer("fafafdfgd");
char[] chs=new char[9];
sb.getChars(2,4,chs,1);
for(int i=0;i<chs.length;i++)
{
sop("chs["+i+"]="+chs[i]+";");
}
public static void method_update()
{
StringBuffer sb=new StringBuffer("jgfdgsdfm");
//		sb.replace(1,4,"java");//将角标1-4替换成java
sb.setCharAt(2,'k');//将角标为2的字母替换成k
sop(sb.toString());
}

public static void method_delete()
{
StringBuffer sb=new StringBuffer("affgfg");
//		sb.delete(1,3);
//清空缓冲区
//		sb.delete(0,sb.length());//删除所有
//      sb.delete(2,4);//删除某一个2-4
sb.deleteCharAt(2);
sop(sb.toString());
}

public static void method_add()
{
StringBuffer sb=new StringBuffer();
sb.append("abc").append(true).append(34);//方法调用链
//		StringBuffer sb1=sb.append(34);
sb.insert(1,"qq");
sop(sb.toString());//abctrue34
//		sop(sb1.toString());
}

public static void sop(String str)
{
System.out.println(str);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐