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

黑马程序员——String类常见的操作方法

2015-07-25 11:36 429 查看
 ——- android培训java培训、期待与您交流! ———-

String类 常见操作方法

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(String str);返回的是str在字符串中第一次出现的位置
int indexOf(String str,int fromIndex);从fromIndex指定的位置开始,获取str在字符串中出现的位置。


2,判断

2.1 字符串中是否包含某一个子串

boolean contains(str);

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

所以,也可以用于对指定判断是否包含。

if(str.indexOf(“aa”)!=-1)

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

2.2 字符串中是否有内容。

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

2.3 字符串是否是以指定内容开头。

boolean startsWith(str);

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

boolean endWith(str);

2.5 判断字符串内容是否相同。复写了Object类中的equals方法。

boolean equals(str);

2.6 判断内容是否相同。并忽略大小写。

boolean equalsTgnoreCase();

3.转换。

3.1将字符数组转成字符串。

构造函数: String(char[])

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

静态方法:

static String copyValueof(char[]);

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

3.2将字符串转成字符数组。**重点

char[] toCharArray()

3.3将字节数组转成字符串。

String(byte[])

String(byte[],offect,count);

3.4将字符串转成字节数组。

byte[] getBytes();

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

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

String valueOf(int)

String valueOf(double)

4.替换

String replasce(oldchar,newchar);

5.切割

String split(regex);

6.获取子串。

String substring(begin);

String substring(begin,end);

7.特殊转换。(去除空格,两者比较)

7.1 将字符串转换成大写或者小写

String toUperCase();

String ToLowerCase();

7.2将字符串两端多余空格去除。

String trim();

7.3将两字符串进行既然顺序的比较。

int compareTo(string);

示例1:

class String1
{
public static void method_get()
{
String str="abcdeakpf";
//长度
//System.out.println(str.length);
//获取某个位置的字符
//System.out.println(str());
sop(str.length());  //长度

//根据索引获取字符
sop(str.charAt(4));//

//根据字符获取索引
sop(str.indexOf('a'));//第一次的位置
sop(str.indexOf('a',3));//3位置后第一次出现的位置
}
public static void main(String[] args)
{
method_get();
String s1="abc";
String s2=new String("abc");
String s3="abc";
String s4=new String("abc");
System.out.println(s1==s2);  //false
System.out.println(s1==s3);  //true
System.out.println(s4==s2);  //false
System.out.println(s1==s2);
}

public static void sop(Object obj)
{
System.out.println(obj);
}
}




//示例2
class  test1
{

public static void main(String[] args)
{
String str="     a,   d     ";
testn1(str);
System.out.println("<"+str+">");//没有去两头空字符
}
public static void testn1(String str)
{
int start =0;
int end =str.length()-1;//和数组异常str角标从零开始,长度从1开始
while(start<=end&&str.charAt(start)==' ')
start++;
while(start<=end&&str.charAt(end)==' ')
end--;
System.out.println("内<"+str.substring(start,end+1)+">");
}
}


编译如下:



/**
将字符串反转
*/
class test2
{
public static void sop(String arr)//封装输出语句
{
System.out.println("<"+arr+">");
}
public static void main(String[] args) //定义主函数
{

String s="    ab,cd,ef   ";
sop(s);
sop(reverseString(s));

}
public static String reverseString(String s)//
{
char[] arr=s.toCharArray();//转换为数组进行操作A
reverse(arr);           //反转操A
return new String(arr); //返回一个数组并转换成字符串
}

public static void reverse(char[] arr)//A1
{
for(int x=0,y=arr.length-1;x<y;x++,y--)
{swap(arr,x,y);}

}
public static void swap(char[] arr,int x,int y)//A2
{
char temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;

}

}


编译如下:



/**
将部分字符串a--c反转
*/
class test3
{
public static void sop(String arr)//封装输出语句
{
System.out.println("<"+arr+">");
}
public static void main(String[] args) //定义主函数
{
String s="     ab,cd,ef   ";
sop(s);
sop(reverseString(s,5,8));
}
public static String reverseString(String s,int a,int b)
{
char[] arr=s.toCharArray();//转换为数组进行操作A
reverse(arr,a,b);           //反转操A
return new String(arr); //返回一个数组并转换成字符串
}
public static void reverse(char[] arr,int a,int b)//A1
{
for(int x=a,y=b-1;x<y;x++,y--)
{swap(arr,x,y);}
}
public static void swap(char[] arr,int x,int y)//A2
{
char temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}


编译如下:



/**
获取字串的位置”abkkcdkkefkkskk“
利用split切割方法
*/
class test4
{
public static void main(String[] args)
{
String str="kkabkkcdkkefkks";
sop("count=------"+str.split("kk").length);//不建议使用
sop("count="+ getSubCount(str, "kk"));//改变了字符串
sop("count="+ getSubCount_1(str, "kk"));//不改变字符串
}
public static void sop(String str)
{
System.out.println(str);
}
public static int getSubCount_1(String str,String key)
{
int count=0;//Key出现的次数
int index=0;//字串位置
while((index=str.indexOf(key,index))!=-1)//indexOf(String str, int fromIndex)
{                               //返回从指定的位置开始搜索返回子字符串第一次出现的位置
sop("str= "+str);
sop("index= "+index);
index+=key.length();
count++;
}
return count;
}
public static int getSubCount(String str,String key)
{
int count=0;//key出现的次数
int index=0;//字串位置
while((index=str.indexOf(key))!=-1)//index的位置设定为每次key字符的位置
{
sop("str= "+str);
str=str.substring(index+key.length());//每循环一次都会取key后面子字符串
count++;
}
return count;
}
}




/**
获取两个字符串最大相同的子串
s1="abcwerthelloyuiodef"
s2="cvhellobnm"
思路;
1,将短的字符串按照长度递减的方式获取到
2,将每获取到的子串去长串判断是否包含。
如果包含,已经找到。
*/
class test5
{
public static void main(String[] args)
{
String s2="abcwerthelloyuiodef";
String s1="cvhellobnm";
//getmin(s1,s2);
sop(getMaxSubstring(s1,s2));
}
public static void getmin(String s1,String s2 )
{
String max="",min="";
max=(s1.length()>s2.length())?s1:s2;
min=(max==s1)?s2:s1;
sop("max="+max);
sop("min="+min);
sop(getMaxSubstring(max,min));
}
public static void sop(String temp)
{
System.out.println(temp);
}
public static String getMaxSubstring(String s1,String s2)
{
String max="",min="";
max=(s1.length()>s2.length())?s1:s2;
min=(max==s1)?s2:s1;
sop("max="+max);
sop("min="+min);
for(int x=0;x<min.length();x++)
{
for (int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)//y;每一层开始地址。z:每一层结束位地址
{                                   //遍历每一层都是y和z分别加1,最后判断z到最后一位就是字符串的末位所以是(s.length+1)
String temp= min.substring(y,z);
sop("min.substring(y,z)           "+temp);
if(max.contains(temp))//if(max.indexOf(temp)!=-1)
return temp;
}
}
return "";
}
}


编译如下:



StringBuffer是字符缓冲区

是一个容器C create U update R read D delete

1.长度是可变化的,数组是一个容器,长度是固定的

2.可以直接操作多个数据类型

3.最终会通过toString方法变成字符串。

4.当数据类型不确定,数据个数不确定,最终变成字符串时候用。

1.存储。

StringBuffer append();将知道数据作为参数添加到已有数据结尾处。

StringBuffer insert(index,数据):可以将数据插入到指定index位置。

2.删除。

delete(statrt,end),删除头不删除尾

delete(0,str.length()) 清空缓冲区

deleteCharAt(n)清空n位置的字符。

3.获取

int charAt(int index)

int indexOf(String str)

String substring(int start,int end)

4.修改

replace(int start,int end,String str1)//换头不换尾

setCharAt(2,k);替换字符

5.反转

StringBuffer reverse()

6. 定义一个新数组,将缓冲区指定位置字符串存储到该字符数组指定位置(不包含尾)

void getChars(int strBegin,int sreEnd,char[] dst, int dstBegin)

原来头, 原来尾, dst的字符数组,数组存储开始位

**升级三个因素:

1.提高效率。

2.提高安全性。

3.简化书写。**

class test6
{
public static void main(String[] args)
{
StringBuffer sb=new StringBuffer();
//StringBuilder sb=new StringBuilder();//方法一样
sb.append("abc").append("true").append(38);//"abctrue38"
sb.insert(1,"qq");//1位置插入数据
sop(sb.toString());
char [] str=new char [6];//定义新数组长度为6
sb.getChars(1, 4,str,1) ;//将sb字符串中数据从1位置到3位置存储到str数组1位置后。
sop(new String(str));
for(int x=0;x<str.length;x++)
{
sop("str["+x+"]=  "+str[x]);
}
/*sb.replace(1,4,"java");//**替换1--4,不包含4
sop(sb.toString());
sb.delete(1,5);//**删除1--5,不包含5
sop(sb.toString());
sb.deleteCharAt(3);//删除3
sop(sb.toString());
sb.setCharAt(3,'k');//替换2
sop(sb.toString());
sb.delete(0,(sb.length()));//清空缓冲区
sop("<"+sb.toString()+">");
//sop(sb1.toString());
//sop(sb2.toString());
//sop("sb1==sb:  "+(sb1==sb));*/
}
public static void sop(String str)
{
System.out.println(str+">");
}
}


编译如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: