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

黑马程序员——学习日记之--String类常用方法示例

2015-05-24 18:40 323 查看
——- android培训java培训、期待与您交流! ———-

1—String简述

特点:

(1)String是类类型变量。

(2)String类是final类,一旦赋值就不能被改变。

(3)字符串是由字符组成的,可以看成是字符数组。

(4)字符串在内存中存储在常量池中。

(5)凡是被双引号圈起来的内容全是字符串常量。

String在内存中的特点:

看下面两条语句:

String s1="abc";
String s2=new String("abc");


如果内存中没有字符串常量”abc”,s1会新建一个常量并指向它。

如果内存中已经有常量”abc”,s1就不再新建,而是直接指向该常量。

而第二条语句 s2,不论内存中有没有该常量,都新建一个。

String的比较方法 equals :

boolean b1= s1==s2;
boolean b2= s1.equals(s2);


第一句,因为s1和s2存储的是字符串的地址,所以比较的也是两个字符串的地址。

第二句中,因为String 复写了equals方法,所以这里比较的是两个字符串内容是否相同。

注意:

字符串s1指向”abc”,字符串s2指向一个new对象,对象指向一个字符串常量。

2—字符串常见方法

常用构造方法

String()                    //无参构造函数
String(s)                   //新建一个字符串。
String(char [])             //用全部字符数组元素顺序组成一个字符串。
String(char [],offset,len)  //用部分字符数组元素顺序组成一个字符串。
String(byte [])             //用全部字节数组元素顺序组成一个字符串。需要解码为字符。
String(byte [],offset,len)  //用部分字节数组元素顺序组成一个字符串。需要解码为字符。


常用方法:

boolean  s.equals(Object oo)    //将字符串与指定对象比较。
boolean  s.equalsIgnoreCase(str)//将字符串与指定对象比较并忽略大小写。
boolean  s.contains(str)        //判断字符串是否包含指定字符串。
boolean  s.isEmpty()            //判断字符串是否为空字符串。
boolean  s.startsWith(str)      //判断字符串是否以指定字符串开头。
boolean  s.endsWith(str)        //判断字符串是否以指定字符串结尾。

char    charAt(index)           //获取字符串在指定角标位的字符。
int     s.length()              //获取字符串的长度。
int     s.indexOf(str)          //获取s中str的开头角标位,不存在返回-1 。
int     s.indexOf(str,from)     //获取s中从指定角标开始的str的角标位。
int     s.lastIndexOf(str)      //逆向获取角标位。
int     s.compareTo(str)        //比较两字符串的每个字符,如果全相等,返回0。
String  s.substring(index)      //截取字符串,从指定位置到结尾。
String  s.substring(from,to)    //截取指定始末角标的字符串。
String  s.toLowerCase()         //字符串转成全小写。
String  s.toUpperCase()         //字符串转成全大写。
String  s.trim()                //字符串去掉首尾的多个空格。
String  s.concat(str)           //将指定字符串连接到当前字符串。
String  s.replace(char1,char2)  //将字符串中的char1替换为char2。
String  s.replace(str1,str2)    //将字符串中的str1替换为str2。
String  String.valueOf(Object oo)//获取对象的字符串表示形式。

String      s.replaceAll(reg,str)   //将符合正则规则的字符串替换成str。
char []     s.toCharArray()         //将字符串转成字符数组。
byte []     s.getBytes()            //将字符串转成字节数组。
String []   s.split(reg)            //将符合正则规则的字符串作为切割符,切割成字符串数组。
boolean     s.matches(reg)          //判断字符串是否与正则表达式匹配。


字符串的常用获取功能。

class Demo
{
public static void main(String [] args)
{
String s="abcdabcd";
System.out.println(s.length());         //打印字符串长度。8
System.out.println(s.charAt(4));        //打印字符串4角标位上的字符。a
System.out.println(s.indexOf('a'));     //打印a字符第一次出现的角标位。0
System.out.println(s.indexOf('a',2));   //打印a字符从2角标位以后第一次出现的位置。4
System.out.println(s.lastIndexOf('a')); //打印a字符从右往左第一次出现的位置。4
System.out.println(s.substring(2));     //截取子字符串,从2角标到末尾。cdabcd
System.out.println(s.substring(2,5));   //截取子字符串,从2角标到5角标。cda
System.out.println(s.compareTo("abc")); //比较两个字符串,返回一个正整数。5
System.out.println(s.concat("abc"));    //打印两字符串连接起来的字符串形式。abcdabcdabc
System.out.println(s.trim());           //打印字符串去掉首尾空格的表示形式。abcdabcd
System.out.println(s.replace('a','A')); //打印替换所有a字符的新字符串。AbcdAbcd
System.out.println(s.replace("cd","CD"));//打印替换所有cd字符串的新字符串。abCDabCD
System.out.println(String.valueOf(s));  //打印s的字符串表示形式。abcdabcd
}
}


注意:

s.length() 一定要加括号,这和数组的length不同。

lastIndexOf(str) 虽然是反向索引字符串,但返回的还是找到的子字符串的开头角标位。

(3)substring(from) 只有一个参数时,截取的是从from到末尾的新字符串。注意此方法名全小写。

(4)s.compreTo(str) 该方法返回整数,只有在两字符串相等时,才返回0,

否则返回第一个对应字符不相等的ASCII码整数差。

如:abcd 与 abad 第三个字符不相等,并且c比a的ASCII码整数大2,所以返回2.

(5)字符串是final类,所有返回字符串的方法放回的都是一个新字符串。

知识点:

–模拟 trim方法,去掉字符串两端空格

class Demo
{
public static void main(String [] args)
{
String s="   ni hao   ";
System.out.println(myTrim(s));
}
public static String myTrim(String s)
{
int start=0,end=s.length()-1;
while (start<=end && s.charAt(start)==' ')
start++;
while (start<=end && s.charAt(end)==' ')
end--;
return s.substring(start,end+1);
}
}


注意:

截取字符串时,两个参数包含头不包含尾。

字符串的常用判断功能,如下示例:

class Demo
{
public static void main(String [] args)
{
String s="Demo.java";
System.out.println(s.isEmpty());            //s是否为空,false
System.out.println(s.contains("java"));     //s是否包含java,true
System.out.println(s.startsWith("Demo"));   //s是否以Demo开头,true
System.out.println(s.endsWith(".java"));    //s是否以 .java 结尾,true
System.out.println(s.equals("demo.java"));  //s是否内容和demo.java 相等,false
System.out.println(s.equalsIgnoreCase("demo.java"));//不区分大小写时s是否和demo.java 相等,true
}
}


字符串中的常用转换功能,如下示例:

class Demo
{
public static void main(String [] args)
{
char [] chArr={'a','b','c','d','e','f'};
String s1=new String(chArr);
String s2=new String(chArr,2,3);    //从0+2角标开始,取三个数组元素组成字符串。
System.out.println(s1.toUpperCase());//打印s1的大写表示形式。
System.out.println(s2);

char [] ch=s2.toCharArray();        //将字符串转成字符数组。

byte [] byteArr={11,26,48,56,67,78,89};
String s3=new String(byteArr);
String s4=new String(byteArr,2,4);
System.out.println(s3);
System.out.println(s4);
}
}


字符串切割功能。

(1)字符串切割是以指定的字符串作为切割符,把字符串切成短字符串,并添加到一个字符串数组中。

(2)切割符是一种正则规则,这里只简单看做一个短字符串,不考虑复杂的正则规则。

字符串切割方法示例:

class Demo
{
public static void main(String [] args)
{
String s="zhangsan,lisi,wangwu,zhaoliu";
String [] arr=s.split(","); //对包含多个姓名的字符串切割分段成每个姓名字符串。
for (String str : arr)      //高级for 循环
{
System.out.println(str);
}
}
}


注意:
(1)切割符如果是小数点,需要转义字符转义。

(2)高级for循环是for循环的一种简写形式。

(3)split方法实际传递的参数是正则表达式。

3—扩展知识

StringBuilder :字符串缓冲区。

特点:长度可变,可以添加字符串以及一系列操作。

常用方法:

int   sb.length()               //缓冲区的长度
int   sb.indexOf(str)           //str在缓冲区中第一次出现的位置索引
int   sb.indexOf(str,from)      //str在缓冲区中指定角标以后第一次出现位置的索引
char  sb.charAt(index)          //缓冲区指定角标上的字符

StringBuilder   sb.reverse()                //将缓冲区内容反转
StringBuilder   sb.append(Object oo)        //缓冲区添加元素
StringBuilder   sb.delete(start,end)        //缓冲区指定角标的内容删除
StringBuilder   sb.deleteCharAt(index)      //删除缓冲区指定角标上的字符
StringBuilder   sb.insert(offset,Object oo) //从起始位偏移指定长度插入一个元素
StringBuilder   sb.replace(start,end,str)   //将缓冲区中指定始末的内容替换成字符串str

String  sb.substring(start)         //从指定位置截取字符串内容并返回新的缓冲区
String  sb.substring(start,end)     //从指定始末位置截取字符串返回到新的缓冲区
String  sb.toString()               //缓冲区的字符串表示形式


StringBuilder 方法示例:

class Demo
{
public static void main(String [] args)
{
StringBuffer sb=new StringBuffer();
sb.append("123");           //添加一个字符串
sb.append(987);             //添加一个整数值
sb.append(true);            //添加一个布尔值

System.out.println(sb.length());        //打印缓冲区长度
System.out.println(sb.toString());      //打印缓冲区字符串表示形式
System.out.println(sb.delete(0,3));     //删除0,1,2角标的字符

System.out.println(sb.replace(3,7,"false"));//替换3,4,5,6角标 "true" 为"false"。
System.out.println(sb.insert(0,"AAA"));     //从0角标插入字符串
System.out.println(sb.substring(6));        //截取字符串打印
}
}


注意:
(1)StringBuilder 也是可以直接打印的,但是需要用String类型时,需要转成 String 。

(2)添加的元素都以字符串表示。

StringBuffer: 字符串缓冲区。

StringBuffer 和 StringBuilder 用法基本一致。

区别: StringBuffer是线程安全的,但是效率低;

StringBuilder 是线程不安全的,但是效率比较高。

一般使用 StringBuilder 。

4—String 练习

练习一:

将字符串指定部分反转。

先将要反转的部分取出,然后反转,然后replace替换。

class Demo
{
public static void main(String [] args)
{
String str="abcd1234abcd";
String s=reverse(str,4,7);
System.out.println(s);
}
public static String reverse(String str,int start,int end)
{
String s=str.substring(start,end+1);    //截取字符串包含头不包含尾,所以要多截取一位。
StringBuilder sb=new StringBuilder();   //新建一个字符缓冲区。
for (int x=0;x<s.length();x++)
{
sb.append(s.charAt(x));             //往字符缓冲区添加元素。
}
return str.replace(s,sb.reverse().toString());    //返回原字符串替换后的字符串。
}
}


练习二:

获取一个字符串在另一个字符串中出现的次数。

class Demo
{
public static void main(String [] args)
{
String str="nidnshiwodnsdeshednsme";
System.out.println(time(str,"dns"));
}
public static int time(String str,String s)
{
int index=0,count=0;
while (index!=-1)
{
count++;
index=str.indexOf(s,index+s.length());
}
return count;
}
}


练习三:

获取两个字符串中最大相同子串

class Demo
{
public static void main(String [] args)
{
String str="chfoyhellodutjg";
String s="dofhelloxga";
System.out.println(time(str,s));
}
public static String time(String str,String s)
{
int L = s.length();
String s0=s;
while (str.indexOf(s0)==-1)  //当不是整串包含时,才会进入循环。
{
L--;
for (int n=0;n+L<=s.length();n++)
{
s0=s.substring(n,n+L);
if (str.indexOf(s0)!=-1)
return s0;      //这里返回的只有一个字符子串,也有可能包含相同长度的多个字串。
}
}
return s;                  //如果原字符串包含在另一个字符串,就会在这里直接返回。
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐