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

黑马程序员---String类

2015-06-18 12:18 435 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、String


1、概述

String是字符串的类类型,用于描述字符串事物。字符串是一个特殊的对象。


2、特点

字符串最大的特点就是:一旦被初始化就不可以被改变。

字符串类是被final修饰的,意味着字符串不能被继承。

例:

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


比较的结果:

s1==s2(false)
// == 比较的是字符串对象的内存地址值,在这里s1,s2是不同的对象,其地址值不同
s1.equals(s2)(true)
//String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。
s1和s2的区别:

        s1在内存中有一个对象。

        s2在内存中有两个对象。 

 创建方法:

<span style="font-size:10px;">String s = new String(char a[])
String s = new String (char a[],int offset,int length)
String s = new String(char[] value)  </span><span style="font-size: 14px;">        </span>



3、常见操作方法


1、获取

        1.1字符串中包含的字符数,也就是字符串的长度

               int   length()://获取长度。

        1.2根据位置获取位置上的某个字符

               char  charAt(int  index)://当访问到字符串中不存在的角标时,会发生字符串角标越界的错误。

        1.3根据字符获取该字符存在字符串的位置

              int  indexOf(int ch)://返回的是ch在字符串中第一次出现的位置。//传入的是字符对应的ASCII码。//如果没有找到,返回-1。

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

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

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

              int  lastIndexOf()://反向索引 


2、判断

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

              boolean   contains(str);

        //特殊之处:indexOf(str)可以索引str第一次出现的位置,如果返回-1表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。如:if(str.indexOf(“aa”)!=-1)而且该方法既可以判断,又可以获取出现的位置。如果只为判断,用contains。

        2.2字符串中是否有内容

              booleanifEmpty();//原理就是判断长度是否为0。

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

              booleanstartsWith(str);

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

              booleanendsWith(str);

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

              booleanequals(str);

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

              booleanequalsIgnoreCase();


3、转换

        3.1将字符数组转成字符串

          
fe19
   构造函数:String (char[]);

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

             静态方法:

                                 static String copyValueOf(char[]);

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

                                 static String valueOf(char[]);

        3.2将字符串转成字符数组

              char[]toCharArray();

        3.3将字节数组转成字符串

              String (byte[]);

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

        3.4将字符串转成字节数组

              byte[]getBytes();

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

              StringvalueOf(int);

              StringvalueOf(double);

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


4、替换

        String   replace(oldchar,newchar);//返回的是一个新字符串。如果要替换的字符不存在,返回的还是原字符串。


5、切割

        String[]  split(regex);//涉及到正则表达式的点,不能作为切割字符串的regex。


6、子串,获取字符串中的一部分

        String substring(begin);//从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常。

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


7、转换,去除空格,比较

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

              StringtoUpperCase();

              String toLowerCase();

        7.2将字符串两端的多个空格去除

              String trim();        

        7.3对两个字符串进行自然顺序的比较

              intcompareTo(String)


二、StringBuffer


1、概述

        StringBuffer是一个容器,字符串的组成原理就是通过该类实现的。StringBuffer可以对字符串内容进行增删改查等操作,很多方法和String相同。


2、特点

        1、而且长度是可变化的。(数组是固定的)

        2、可以直接操作多个数据类型。(数组只能操作一个)

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


3、常见操作


1、存储

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

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


2、删除

        StringBufferedelete(start,end):删除缓冲区中的数据,包含start,不包含end。

        StringBuffer deleteCharAt(index):删除指定位置的字符。

        清空缓冲区:对象.delete(0,对象.length());


3、获取

        char charAt(int index);//当访问到字符串中不存在的角标时,会发生字符串角标越界的错误。

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

        int lastIndexOf(String str);//返回的是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、将缓冲区中指定数据存储到指定字符数组中

 voidgetChars(int srcBegin, int srcEnd,char[] dst,int dstBegin);


三、StringBuilder

  StringBuilder是一个容器,字符串的组成原理就是通过该类实现的。StringBuider可以对字符串内容进行增删改查等操作。

与StringBuffer的区别:

        StringBuffer是线程同步的。有锁。效率低

        StringBuilder是线程不同步的。无锁。效率高

开发过程中,建议使用StringBuilder。如遇多线程,使用StringBuffer或自己加锁。


四、练习

trim() 的实现:

package string;
public class TrimDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String s = "     wing     ";
System.out.println(trim(s));
}
public static String trim(String str)
{
int start = 0;
int end = str.length()-1;
while(start<=end&&str.charAt(start)==' ')
start++;
while (start<=end&&str.charAt(end)==' ')
end--;
return str.substring(start, end+1);//截取子字符串时,留首不留尾,故end值要+1
}
}
反转字符串:

package string;
public class ReverseDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String s = "dingooeownogjownongioneiog";
System.out.println(reverse(s));
}
public static String reverse(String str)
{
char[] chs = str.toCharArray();
for(int start=0,end=chs.length-1;start<end;start++,end--)
{
char temp;
temp = chs[start];
chs[start]= chs[end];
chs[end]=temp;
}
return new String(chs);
}
}
给定一个子字符串,获取其中另一个字符串中的个数:

package string;

public class SubStringNumDeom {

public static void main(String[] args) {
// TODO 自动生成的方法存根
String s = "dinieinignienigiengoingienngieng";
String s1 ="in";
if(s.contains(s1))
System.out.println(getSubNum(s,s1));
else
System.out.println(0);
}
public static int getSubNum(String str,String substr)
{
int count = 0;
int index = 0;
while(index != -1)
{
if(count != 0)
index = index+substr.length();
index = str.indexOf(substr,index);
if(index!=-1)
count++;
}
return count;
}
}

查表法例子

/**
* 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
* 思路:
* 1.创建输入流,接收来自键盘的数据;
* 2.通过查表法来判断该该数字的中文字符;
* 3.使用StringBuilder方法叠加中文形式的字符串;
* 4.打印字符串
*/
package com.itheima;
import java.io.*;

public class Test3 {

public static String format(String str){//通过查表法判断数字的中文字符
char dicitionary[] = {'零','一','二','三','四','五','六','七','八','九'};
//创建个数据表
StringBuilder sb = new StringBuilder();
char charArray[] = str.toCharArray();
//将字符串转换成字符数组
for(char ch:charArray){
if((int)ch<48||(int)ch>57)
return "contain unnum";//判断输入字符值是否是数值
sb.append(dicitionary[(int)ch - 48]);
//追加中文字符
}
return sb.toString();
}
public static void main(String[] args)throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//创建从键盘输入的缓冲输入流对象
String str = null;
Tag:
while(true){
while((str=in.readLine())!=null){
if(str.equals("over")) //结束标志
break Tag;
else if(str.equals(""))
continue;
else if(format(str).equals("contain unnum")){
System.out.println("输入数值含有字符,请重新输入:");//若出现非数字字符的处理意见
continue;
}
else
System.out.println(format(str));//打印结果
}
in.close();//关闭流对象并释放与该流相关的系统资源。
}
}

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