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

黑马程序员 String类

2015-06-14 14:34 447 查看
                                                                               黑马程序员    String类

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

1.概述:String类代表字符串。Java程序中的所有字符串字面值(如”abc”)都作为此类的实例实现。

2.创建String类对象方式:

(1)String s=new String();  //不常用

(2)String s1=“”;  /*字符串是特殊的对象;字符串最大的特点:一旦被初始化就不可以被改变*/

(3)String s2=new String(“abc”);   String s1=“abc”;

s1.equals(s2);  /*答案是true。因为String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。区别:s1在内存中有一个对象;s2在内存中有两个对象*/

3.String类提供了多个方法对字符串进行操作,那么常见的方法有 :

(1)获取。

a.字符串中的包含的字符数,也就是字符串的长度。

  int length();获取长度。

b.根据位置获取位置上某个字符。

  char charAt(int index);

c.根据字符获取该字符在字符串中位置。

  int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。

  int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置。

  int indexOf(String str):返回的是str在字符串中第一次出现的位置。

  int indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置。

  int lastIndexOf(int ch):反向索引

//String类中常见的获取方法
class StringGetDemo
{
public static void method_get()
{
String str="abcdabefg";
sop(str.length());    //获取字符串的长度
sop(str.charAt(1));   //获取1位置上某个字符
sop(str.indexOf('a'));//获取'a'字符在字符串中位置
sop(str.indexOf('a',2));//从指定2位置开始,获取'a'在字符串中出现的位置
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{

method_get();
}
}


(2)判断。

a.字符串中是否包含某一个子串。

  boolean contains(str)  //只进行判断

特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在。If(str.indexOf(“aa”)!=-1)

而且该方法即可以判断,也可以获取出现的位置。

b.字符串中是否有内容。

  boolean isEmpty():原理就是判断长度是否为0。

c.字符串是否是以指定的内容开头。

  boolean startsWith(str);

d.字符串是否是以指定内容结尾。

  boolean endsWith(str);

e.判断字符串内容是否相同,复写了object类中的equale方法。

  Boolean equals(str);

f.判断内容是否相同,并忽略大小写。

  Boolean equalsIgnoreCase();

<span style="font-size:14px;">//String类中的常见方法—判断
class StringIfDemo
{
public static void method_get()
{
String str="ArrayDemo.java";//创建字符串对象
sop(str.isEmpty());    //字符串中是否有内容
sop(str.startsWith("Array"));   //字符串是否是以指定的内容开头
sop(str.endsWith(".java"));//字符串是否是以指定内容结尾
sop(str.contains("Demo"));//从指定2位置开始,获取'a'在字符串中出现的位置
sop(str.equals("Array"));//判断字符串内容是否相同
sop(str.equalsIgnoreCase("arraydemo.java"));//判断内容是否相同,并忽略大小写
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{

method_get();
}
}</span>


(3)转换

a.将字符数组转成字符串。

构造函数:

String(char[]);

String(char[],offset,count);将字符数组中的一部分转成字符串。

静态方法:static String copyValueOf(char[]);

static String copyValueOf(char[] data,int offset,int count);

static String valueOf(char[]);

b.将字符串转成字符数组。

char[] toCharArray();

c.将字节数组转成字符串。

String(byte[]);

String(byte[],offset,count);将字节数组中的一部分转成字符串。

d.将字符串转成字节数组。

byte[] getBytes();

e.将基本数据类型转成字符串。

static String valueOf(int);

static String valueOf(double)

特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

//String类中的常见方法—转换
class StringTransDemo
{
public static void method_trans()
{
char[] arr={'a','b','c','d','e','f'};//创建字符数组
String s=new String(arr);  //将字符数组转成字符串
String s1=new String(arr,1,3);//将字符数组中的一部分转成字符串
sop("s="+s);
sop("s1="+s1);
String str="hello_wold";//创建字符串对象
char[] ch=str.toCharArray();//将字符串转成字符数组
for(int x=0;x<ch.length;x++)
{
sop("ch"+x+"="+ch[x]);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
method_trans();
}
}

(4)替换

String replace(oldchar,newchar);

(5)切割

String[] split(regex)

(6)子串,获取字符串中的一部分。

String substring(begin);

String substring(begin,end);//包头不包尾

//String类中常见方法—替换和切割
class StringMethodDemo
{	public static void method_sub()
{
String s1="Hello java";
sop(s1);
sop(s1.replace("a","n"));//替换字符
sop(s1.substring(0));//获取从脚标为0的到最后一位的字符串
sop(s1.substring(0,4));//获取从0脚标为0到脚标为3的字符串,
String s2="zhangsan,lisi,wangwu";
String[] arr=s2.split(",");//以“,”为切割标志对字符串进行切割
for(int x=0;x<arr.length;x++)
{
sop(arr[x]);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
method_sub();
}
}

(7)转换,去除空格,比较

a.将字符串转成大写或者小写

String toUpperCase();

String toLowerCase();

b.将字符串两端的多个空格去除。

String trim();

c.对两个字符串进行自然顺序的比较。

int compareTo(string);

//String类中常见方法—转换,比较和去空格
class StringCompareDemo
{	public static void method_compare()
{
String s1="    Hello java     ";
sop(s1.toUpperCase());//将字符串转成大写
sop(s1.toLowerCase());//将字符串转成小写
sop(s1.trim());//去除字符串两端的多个空格
String s2="acc";
String s3="aac";
sop(s2.compareTo(s3));//对两个字符串进行自然顺序的比较.
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
method_compare();
}
}


练习题

//练习一:去除字符串两端空格
class StringTrimDemo
{	public static String myTrim(String str)
{	int start=0;
int end=str.length()-1;
while(start<=end && str.charAt(start)==' ')
start++;
while(start<=end && str.charAt(en
b38a
d)==' ')
end--;
return str.substring(start,end+1);//获取某部分的字符串
}
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{
String s="    ab cd    ";
sop("s="+s);
s=myTrim(s);
sop("s="+s);
}
}
//练习二:将字符串反转
class StringReverseDemo
{	public static String reverseString(String s)
{
char[] chs=s.toCharArray();//将字符串转成数组
reverse(chs);//反转数组
return new String(chs);//将数组转成字符串
}
public static void reverse(char[] arr)
{
for(int start=0,end=arr.length-1;start<end;start++,end--)
swap(arr,start,end);
}
public static void swap(char[] arr,int x,int y)
{
char temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{
String s="    ab cd    ";
sop('('+s+')');
sop('('+reverseString(s)+')');
}
}

//练习题三:获取一个字符串在另一个字符串中出现的次数
class GetCount
{	public static int getSubCount(String str,String key)
{
int index=0;
int count=0;
while((index=str.indexOf(key,index))!=-1)
{
sop("index="+index);
index=index+key.length();
count++;
}
return count;
}
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{
String str="abkkcdkkefkkhikk";
sop("count="+getSubCount(str,"kk"));
}
}


 StringBuffer

1.StringBuffer是字符串缓冲区,是一个容器:它的长度是可变化的;可以字节操作多个数据类型。

数组也是一个容器,但它的长度不可以改变。

2.功能

(1)存储。

StringBuffer append():将指定数据作为参数添加到已有数据结尾。

StringBuffer insert(index,数据):可以将数据插入到指定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 replace(start,end,string)

void setCharAt(int index,char ch)

(5)反转

StringBuffer reverse()

(6)

Void getChar(int srcBegin,int srcEnd,char[] dst,int dstBegin)

3.JDK1.5版本之后出现了StringBuilder。

StringBuilder是线程不同步的,提高效率。(建议使用)

StringBuffer是线程同步的,提高安全性。

4.基本数据类型对象包装类

(1)    类             基本数据类型

            Byte                 byte

            Short               short

            Integer             int

            Long                long

            Boolean           boolean

            Float                float

            Double             double

           Character         char

(2)基本数据类型对象包类的最常见作用,就是用于基本数据类型和字符串类型之间的转换。

a.基本数据类型转成字符串:

基本数据类型.toString(基本数据类型值)

如:Integer.toString(34);//将34整数变成”34”

b.字符串转成基本数据类型。

xxx a=Xxx.parseXxx(String);

int a=Integer.parseInt(“123”);

double b=Double.parseDouble(“12.23”);

boolean b=Boolean.parseBoolean(“true”);

c.十进制转成其他进制:

toBinaryString();

toHexString();

toOctalString();

d.其他进制转成十进制。

parseInt(string,radix)

5.JDK1.5版本以后出现的新特性。

Integer x=new integer(4);

Integer x=4;    //自动装箱,等于new Integer(4)

x=x+2; //进行自动拆箱(x.intValue),变成int类型和2进行加法运算,再将和进行装箱赋给x

Integer m=128;

Integer n=128;

sop(m==n);//false,对象不同

Integer a=127;

Integer b=127;

sop(a==b);//true,因为当数值在byte范围内[-128,127],对于新特性,如果该数值已经存在,则不会在开辟新的空间,所以它们指向了同一个对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: