黑马学习日记_String类详解_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 黑马学习日记_String类详解

黑马学习日记_String类详解

 2014/4/6 12:17:17  小驴变黑马  程序员俱乐部  我要评论(0)
  • 摘要:----------------------android开发、java培训、期待与您交流!----------------------1、String类概述String类是Java中专门对字符串进行操作的的类。String类被final所修饰,所以他不可以被继承所以String类中专门操作字符串的方法时不可以被覆写的。在Java程序中的所有字符串字面值(如"abc"、"540087")都是该类的具体对象,在双引号内。在日常生活中字符串出现的频率很高
  • 标签:详解 学习
----------------------class="Apple-converted-space">?android开发、java培训、期待与您交流! ----------------------
1、String类概述 String类是Java中专门对字符串进行操作的的类。String类被final所修饰,所以他不可以被继承所以String类中专门操作字符串的方法时不可以被覆写的。在Java 程序中的所有字符串字面值(如 "abc"、"540087")都是该类的具体对象,在双引号内。在日常生活中字符串出现的频率很高,在程序中操作也比较频繁所以String类中的方法要重点掌握。 ? 2、String类的特点 通过查阅API,String类中有很多构造方法 有参数的和空参数的。因为String是一个特殊的类下面通过一个实例讲解: (1)String s = new String();//该语句创建了一个字符串对象 s (2)String s1 = " "; ??//该语句也是创建了一个字符串对象s1 ,因为被双引号引起来的就是一个字符串对象,语句1和语句2的作用是相同的,但语句2更为简单,建议使用语句2创建字符串对象。 (3)String s2 = "abc";//该语句中s2是类类型变量,我们知道类类型变量指向对象,所以谁"abc"是一个字符串对象 (4)s2 = "sfdf"; //语句3和语句4中,对象的内容没有改变,是s2改变了一开始s2指向"abc"语句4执行完后s2指向了"sfdf"。字符串是一个常量也是一个对象。字符串最大的特点:一旦初始化成功就不能被改变。 (5)String s3 = new String("abc"); s2 == s3;结果是false,因为==比较的是内存地址值,因为s2是一个对象而s3是两个对象因为有new s2.equals(s3);结果是true ,因为String类将Object中的equals方法覆写了,判断的是字符串的内容是否相同 ? 3、String类中的方法 (1) 获取 1.1字符串中包含的字符数,也就是字符串长度 int length( ); 获取长度 1.2根据位置获取该位置上的字符 char charAt(int ?index); 1.3根据字符获取该字符在字符串中的位置 int indexOf(int ?ch);//ch?代表ASCII码 并且返回的是ch在字符串中首次出现的位置 int?indexOf(int ?ch,int fromIndex);从指定位置fromIndex开始获取ch在字符串中出现的位置 int indextOf(String str);返回的是str在字符串中第一次出现的位置 int indexOf(String str,int formIndex);从指定位置fromIndex开始获取str在字符串中出现的位置 1.4反向获取(角标不会变只是从后向前查找) int??lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引 ?int??lastIndexOf(int ch, int fromIndex) 返回指定字符在字符串中最后一次出现处的位置 ?int ?lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 ?int??lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的位置 1.5 ?获取子串 String substring(int beginIndex) ?//从指定位置到结尾,有角标越界异常 String substring(int beginIndex, int endIndex) //包含头不包含尾 (2)判断 2.1 字符串中是否包含某个子串 boolean contains(CharSequence ??s);//特殊之处indexOf(String ?str)可以索引str子串第一次出现的位置,如果 返回-1表示该str子串不在字符串中存在,所以也可以对指定字符串判断是否包含,方法是 if(str.indexOf("aa") != -1),而且该方法即可以判断又可获取出现的位置。如果只为判断就用contains(),如果 及判断又拿位置就用 indexOf()进行操作。 2.2 在字符串中是否有内容 boolean isEmpty();原理就是判断长度是否为0 2.3 字符串是否是以指定内容开头 boolean startWith(str); 2.4?字符串是否是以指定内容结尾 boolean endsWith(str); 2.5 判断字符串中内容是否相同 boolean equals(Object?anObject)//此方法覆写了Object中的equals方法 2.6 判断内容是否相同,并忽略大小写 boolean ?equalsIgnoreCase(String ?anotherString); 判断文件名 String str = "ArrayDemo.java"; //判断文件名称中是否是Array单词开头 str.startWith("Array"); //判断文件名称中是否是.java字符串结尾 str.endsWith(".java"); //判断文件中是否包含Demo str.contains("Demo"); (3)转换 3.1 将字符数组转换为字符串 通过构造函数:String (char [ ] ) ????String (char[ ],offset起始位,count 个数)//将字符数组中的一部分转成字符串 通过静态方法:String copyValueOf(char[ ]); ???String copyValueOf(char[ ],offset起始位,count 个数); 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.6 将字符串转成大写或小写 String toUpperCase();//转成大写 String?toLowerCase();//转成小写 ? (4)替换 4.1 String replace(oldChar,newChar);//可以替换一个字符也可以替换一个字符串,如果要替换的字符不存在则 ?????//返回原字符串 (5)切割 5.1 ?String[ ] split(String ?regex);//切割之后返回一个字符串数组 eg: ??String ?s = "zhangsan,lisi,wangwu"; String [ ] arr ?= s.split(",");//用逗号对字符串进行切割 (6)去空格 与 比较 6.1 将字符串两端的空格去除 String trim(); 6.2 对两个字符串进行自然顺序比较 int ?compareTo(String anotherString) // 按字典顺序比较两个字符串。? ??int ?compareToIgnoreCase(String str) // 按字典顺序比较两个字符串,不考虑大小写 注意:字符串的比较是把字符串从开始到结束的每一位拿出来作比较,具体做法是取出相同位置上的字符做减法运算,如果不为0,则认为两个字符串不相等,把相减的差返回如果字符串按顺序比较完了,且长度相同,则返回 0表示相等如果长度不相同,则返回的是两个字符串长度的差。 因此:

返回值小于0,则左边小于右边
返回值等于0,则左边等于右边
返回值大于0,则左边大于右边

?

?4、字符串练习

?

?

class myTrim 

{

public static void main(String[] args) 

{

String s = "   abcd   ";

System.out.println(s);

System.out.println(MyTrim(s));

 

}




public static String MyTrim(String str)

{

int start=0,last=str.length()-1;

while(start<=last && str.charAt(start)==' ')

start++;

while(start<=last && str.charAt(last)==' ')

last--;

return str.substring(start,last+1);

}

}

?-----------------------------------------------------------------------------------------------------------

5、StringBuffer类

?

??StringBuffer是一个字符串缓冲区,是一个容器,而且长度是可变化的可以操作多个数据类型,最终会通过toString方法变成字符串。

StringBuffer是一个容器,顾名思义容器容器就是装东西的东西,无论往里面装东西还是往外取东西,自己还是个容器,引用毕姥爷的话就是面盆理论。 StringBuffer被初始化后可以改变而String一但初始化就不能被改变。 ? 6、StringBuffer中的方法 容器具备增、删、改、查的特点: 1、存储 StringBuffer append();将指定数据作为参数添加到已有数据结尾处 eg:sb.append("abc").append("true").append("34").append("2.0");//方法调用链 ? 2、插入 StringBuffer?insert( int index将要插入的位置,任意数据)//可以将数据插入到指定index位置,注意:角标越界 ? 3、删除 StringBuffer?delete(start,end)//删除缓冲区中的内容,包含头不包含尾 StringBuffer?deleteCharAt(int indext);//删除指定位置的字符 清空缓冲区原理: sb.delete(0,sb.length());//从0开始到结尾 ? 4、获取 char charAt(int ??index);//根据位置获取字符 int indexOf(String ?str);//根据字符串获取位置 int lastIndexOf(String str);//倒序获取字符串的位置 int length( );//返回长度(字符数) String substring(int ?start,int end);//返回子串 ? 5、修改 StringBuffer?replace(int start , int end,String)//替换指定位置的字符串,包含头不包含尾 void setCharAt(int index ,char ?ch)//将指定位置处的字符设置为?ch ? 6、反转 StringBuffer?reverse( );// 将此字符序列用其反转形式取代 ? 7、将缓冲区中指定数据存储到指定字符数组中 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 7、StringBuilder 在JDK1.5版本以后出现了StringBuilder,但StringBuilder和StringBuffer中的方法相同,只不过StringBuffer是线程 同步而StringBuilder线程不同步。如果将StringBuilder的实例用于多个线程是不安全的,如果需要这样的同步建议 用StringBuffer。但在单线程中用StringBuilder。 ? 8、java升级的几个因素 1、提高效率 2、简化书写 3、提高安全性 ? 9、基本数据类型对象包装类

1、在Java中为了操作基本数据类型更加方便高效,Java为我们提供了基本数据类型对象包装类,通过对象包装类我们就能更容易的操作任何一种数据类型,比如整型的最大值、进制问题等等。

2、基本数据类型对应的包装类形式 一般都是首字母大写但是int和char不同,他们的表现形式是Integer和Character ? ? ??3、基本数据类型包装类的常见作用主要用于:基本数据类型和字符串类型之间的转换(网站文本中年龄) 基本数据类型转换成字符串类型 1、基本数据类型 + " "; 2、静态方法:基本数据类型?.?toString(基本数据类型值); eg:Integer?.?toString(34);//将整型34转换成字符串"34" 3、非静态方法 int ??intValue( ); 字符串转换成基本数据类型 1、常见格式Xxx a = Xxx.parseXxx(String); eg:int ?a ?= Integer . parseInt("123");//如果是"a123"提示数据格式错误,所以必须传入数字格式的字符串 ??????boolean ?b ?= ?Boolean.parse("true"); 4、进制转换 十进制转其他进制 static String toBinaryString(int i)?//十进制转二进制 ???????????以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。? static String toHexString(int i)?//十进制转十六进制 ???????????以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。? static String toOctalString(int i)?//十进制转八进制 ???????????以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 其他进制转十进制 static int parseInt(String s, int radix) ??//String s代表进制表现形式"3C" ??int radix代表几进制 eg:parseInt("3C",16); ? 10、基本数据对象包装类新特性 在JDK1.5版本以后基本数据对象包装类出现了一些新特性:自动装箱自动拆箱 eg:Integer ?x = 4;// x是类类型变量所以指向对象,所以该语句隐式将4隐式转换成了Integer即自动装箱 x = x + 4;//此语句中先将x自动拆箱与x进行运算,结果是整型,在自动装箱赋值给x。 在新特性中Integer x中x是引用数据类型所以它还有另一个值即null,在装箱拆箱过程中调用了方法,所以在使用时应先 判断,不为null再进行运算否则会报错误。 ----------------------?android开发、java培训、期待与您交流! ----------------------
发表评论
用户名: 匿名