1、字符串操作,JAVA语言程序设计,本章主要学习内容,字符串的定义和使用 字符串的常用方法,JAVA语言程序设计,字符串,字符串是字符的序列,从某种程度上来说有些类似于字符的数组。 char country=C,h,i,n,a; 在Java中,字符串被当作对象来处理。程序中需要用到的字符串可以分为两大类,一类是创建之后不会再做修改和变动的String类;另一类是创建之后允许再做更改和变化的StringBuffer类。,JAVA语言程序设计,String类的构造方法,由一个String语句来产生 String greeting = “Hello”; 构造String类的对象 String gree
2、ting = new String(“Hello”); 使用一个字符数组的构造语句来产生 Char a = H,e,l,l,o; String s = new String(a);,JAVA语言程序设计,字符串的创建,创建字符串并向屏幕输出 public class StringTest public static void main(String args) String s=hello; System.out.println(s); ,JAVA语言程序设计,String类的常用方法,【案例描述】 创建一个字符串,计算字符串的字符个数,比较两个字符串,把字符串的字符进行大小写的转换。 【相关
3、知识】 length() 取得字串的字元长度 equals(指定字符串) 判断原字串中的字元是否相等于指定字串中的字元 toLowerCase() 转换字串中的英文字元为小写 toUpperCase() 转换字串中的英文字元为大写,JAVA语言程序设计,String类的常用方法,equals( )与=的比较 equals( )方法比较字符串(String)对象中的字符。 =运算符比较两个字符串对象在内存中的地址。 看以下程序,JAVA语言程序设计,String类的常用方法,class EqualsNotEqualTo public static void main(String args) S
4、tring s1 = Hello; String s2 = new String(s1); System.out.println(s1 + equals + s2 + - + s1.equals(s2); System.out.println(s1 + = + s2 + - + (s1 = s2); ,JAVA语言程序设计,String类的常用方法,【 案例描述】 创建了一个整型变量a,双精度类型变量b,把其转化为字符串后并打印,此后又把字符串还原为其原来的类型,并进行打印。 相关知识,String.valueOf(参数 ):该方法能把简单类型的变量的值转换为字符串的表达式。,JAVA语言程序
5、设计,课堂练习,1.练习书上案例,体会字符串方法的使用 2.有两个字符串Java Program和and JSP,编程完成以下功能: 把他们所有的英文都转成小写的形式,把第一个字符串前后的空格都去掉,用小写的P代替第一个字符串中大写的P。 提示:trim()去掉对象中开头和结尾的空格 replace(旧字符,新字符)将对象中的旧字符用新字符代替,JAVA语言程序设计,课堂练习,顺序查找给定字符串“stringisaclass”中s的个数和出现的位置 提示: charAt(index) indexOf(int ch) indexOf(int ch,int formIndex) indexOf(S
6、tring str) indexOf(String str,int formIndex) 返回 String 对象内第一次出现子字符串的字符位置。,JAVA语言程序设计,答案1,public static void main(String args) String s0=Java Program; String s1=and JSP; System.out.println(s0.toLowerCase(); System.out.println(s1.toLowerCase(); System.out.println(s0.trim(); System.out.println(s0.repla
7、ce(P,p); ,JAVA语言程序设计,答案2,public class HelloWorld public static void main(String args) int k=0; String s0=Stringisclass; int i=0; i=s0.indexOf(s); if(i=0) System.out.println(s出现位置+t+i);k=1; for( i=0;i!=-1;) i=s0.indexOf(s,i+1); if(i!=-1) k+; else break; System.out.println(s出现位置+t+i); System.out.print
8、ln(k); ,JAVA语言程序设计,答案3,public class HelloWorld public static void main(String args) int k=0; String s0=stringisclass; int i=0; for( i=0;is0.length();i+) if(s0.charAt(i)=s) System.out.println(s出现的位置:+i);k+; System.out.println(s的出现次数+k); ,JAVA语言程序设计,答案4,class Test2 public static void main(String args)
9、 String s0=Stringisclass; int i=0; int count=0; i=s0.indexOf(s); if(i=0) System.out.println(s出现的第一个位置是0);count=1; i=0; while(i!=-1) i=s0.indexOf(s,i+1); if(i=-1)break; else count+; System.out.println(s出现的位置+i); System.out.println(s出现的个数:+count); ,JAVA语言程序设计,StringBuffer类,String类实现一种不能改变的静态字符串,而Strin
10、gBuffer类实现一种动态可变的字符串。 StringBuffer类提供三种创建方法: public StringBuffer();创建一个空的StringBuffer类。 【注意】新建StringBuffer的对象的默认容量为16 public StringBuffer(int length);创建一个容量大小为length的StringBuffer类。 【注意】新建StringBuffer的对象的长度即为length. public StringBuffer(String str);按str创建一个动态可变的StringBuffer类。 【注意】将一个String类的对象str的内容复制
11、到StringBuffer的内容中,StringBuffer的对象的容量为str的长度加上16.,JAVA语言程序设计,StringBuffer类,每个StringBuffer对象都有一定的容量。只要StringBuffer对象所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。这个固定的容量是16个字符。我给这种算法起个名字叫“添饭算法”。先给你一满碗饭,不够了再给你一满碗饭。,JAVA语言程序设计,StringBuffer类,StringBuffer sb = new StringBuffer(); /初始容量为 16 个字符 sb.a
12、ppend(1234); /这是4个字符,那么16个字符的容量就足够了,没有溢出 System.out.println(sb.length(); /输出字符串长度是4 System.out.println(sb.capacity(); /输出该字符串缓冲区的容量是16 sb.append(“12345678901234567”); /这是17个字符,16个字符的容量不够了,扩容为17+16个字符的容量 System.out.println(sb.length(); /输出字符串长度是17 System.out.println(sb.capacity(); /输出该字符串缓冲区的容量是34,JA
13、VA语言程序设计,StringBuffer的基本操作,分配/获取字符串的长度 void setLength(int newLength) /设置长度 int length() /得到长度 分配/获取字符串的容量 void ensureCapacity(int miniCapacity) /确保StringBuffer的容量不低于minimunCapacity int capacity() /返回StringBuffer的容量 注意:length与capacity的区别,见p116,例5-5 StringBufferCapa.java,JAVA语言程序设计,StringBuffer的基本操作,c
14、har charAt(int i); /返回位置i上的字符,同String void setCharAt(int i, char newChar) ; /把第i个字符改成newChar的值 void getChars(int srcBegin, int srcEnd, char dst, int dstBegin) ; /从srcBegin到srcEnd之间的内容赋值到目的字符数组dst的dstBegin的位置上 P117 例5-6 StringBufferChar.java,JAVA语言程序设计,修改字符串缓冲区,append(boolean;char;int;long;float;doub
15、le;char;char,int,int;Object;String) ; /将参数附加到字符缓冲区,在进行附加操作前,数据被转换成字符串 delete(int start,int end) ; /删除这个字符串缓冲区从start到end的指定字符 deleteCharAt(int index) /从参数index指定的位置上删除一个字符 insert(int,boolean;char;) /将第二个参数插入字符串缓冲区,第一个整数指定一个索引,数据被插入到此索引之前 void reverse() /字符串反转 toString() /返回与StringBuffer字符串内容一样的一个String类的对象,