• 1. 1、字符串 字符串是字符的序列,它是组织字符的基本数据结构,从某种程度上来说有些类似于字符的数组。在Java中,字符串被当作对象来处理。程序中需要用到的字符串可以分为两大类,一类是创建之后不会再做修改和变动的字符串常量;另一类是创建之后允许再做更改和变化的字符串变量。对于字符串常量,由于程序中经常需要对它做比较,搜索之类的操作,所以通常把它放在一个具有一定名称的对象之中,由程序对该对象完成上述操作。 在Java中,存放字符串常量的对象用String类,对于字符串变量,由于程序中经常需要对它做添加,插入,修改等操作,一般存放在StringBuffer类的对象中。
  • 2. 1、字符串 ——String 字符串常量使用双引号括住的一串字符,比如: "Hello world! " Java编译器自动为每一个字符串常量生成一个String类 的实例,因此可以用字符串常量直接初始化一个String对 象,如: String s="Hello world! ";
  • 3. 要创建类String的一个对象并进行初始化,需要调用类 String的构造方法。类String中提供了下面的一些构造方法: String( ):无参数的缺省的构造方法用来创建一个空串。 String s = new String( ); String( String value):利用已经存在的字符串常量创建一个 新的String对象,该对象的内容与给出的字符串常量一致。 String s=new String(“hello”); String( char value[ ] ):通过给构造方法传递一个字符数组 可以创建一个非空串。 char chars[ ] = { ‘a’ , ‘b’ , ‘c’ }; String s = new String( chars ) ; 1、字符串 ——String:创建
  • 4. String( char [ ] , int startIndex, int numChars ):这种方法用来 创建一个非空串,并且指明所创建的字符串在字符数组中的起 始地址以及所包含的字符个数。 char chars[] = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' }; String s = new String ( chars , 2 , 3 ); 该方法生成的串s为“cde”。(注意数组的下标从0开始)1、字符串 ——String:创建
  • 5. String( byte mybyte[], byte hibyte ):因为在Internet上,格式采用八位的ASCII码,所以Java的类String提供了从byte型数组进行初始化的构造方法。其中hibyte指明各字符的高位字节,对于通常所用的ASCII码,必须将高位字节声明为零,而其他的非拉丁文字符则置为非零。 byte mybyte [ ] ={ 97 , 98 , 99 }; String s = new String( mybyte , 0 ); 该方法构造的字符串s是“abc”。1、字符串 ——String:创建
  • 6. String( byte mybyte[], byte hibyte , int startIndex , int numChars ): 这种构造方法与String(char[ ],int startIndex,int numChars) 类似,只是初始化的数组类型不同。 byte mybyte[ ] = { 80 , 81, 82, 83, 84, 85 } ; String s = new String ( mybyte , 0, 2, 3 ); 该方法构造的字符串s是“RST”。 String(StringBuffer buffer):这个构造函数利用一个已经存 在的StringBuffer对象为新建的String对象初始化。1、字符串 ——String:创建
  • 7. 1. length public int length( ) 此方法返回字符串的字符个数,如: String s = "abc"; System.out.println( s.length( ) ); 则将显示字符个数为3。1、字符串 ——String:基本方法
  • 8. 2. charAt public char charAt (int index ) 该方法返回字符串中index位置上的字符,其中index值的范围是0~length-1。 3. getChars 如果要从字符串中提取一个以上的字符,则可以用此方法: public void getchars (int srcbegin,int end,char buf[],int dstbegin) 其中,srcbegin为要提取的第一个字符在源串中的位置, end为要提取的最后一个字符在源串中的位置,字符数组buf[]存放目的字符串,dstbegin为提取的字符串在目的串中的起始位置。1、字符串 ——String:基本方法
  • 9. 4. getbytes public void getbytes (int srcbegin,int end,byte byt[],int dstbegin ) 类似于上一个方法,只是串中的字符均用8位表示,参数及用法同上。 5. indexOf和lastIndexOf 为了在给定的字符串中检索特定的字符或子串,类String提供了上面两种方法,并通过方法重写更方便的处理这类问题。这两种方法中,如果查找成功,则返回匹配成功的字符的位置,如果没有查找到,则都返回 -1。 int indexOf ( int ch) int lastIndexOf ( int ch) 返回字符ch在字符串中出现的第一个和最后一个位置。1、字符串 ——String:基本方法
  • 10. int indexOf(String str) int lastindexOf(String str) 返回子串str中第一个字符在字符串中出现的始末位置。 int indexOf ( int ch, int fromIndex)) int lastIndexOf ( int ch, int fromIndex)) 返回字符ch在字符串中位置fromIndex以后出现的始末位置。 int indexOf (String str,int fromIndex) int lastIndexOf (String str , int fromIndex) 返回子串str中的第一个字符在字符串中位置fromIndex 以后出现的始末位置。1、字符串 ——String:基本方法
  • 11. 6. + 在Java中,运算符“+”可以用来实现字符串的连接,如: String s = “He is” + age + “years old.” 假设整数型变量age的值为15,那么,s的值为 “He is 15 yearsOld”。 7. compareTo public int compareTo ( String str ) 该方法按字典次序比较两个字符串的大小,如果源串较小,则返回一个小于0的值,如相等则返回0,否则返回一个大于0的值。1、字符串 ——String:基本方法
  • 12. 8. regionMatches boolean regionMatches ( int toffset , String other , int ooffset , int len ) boolean regionMatches ( boolean ignoreCase , int toffset , String other , int ooffset , int len ) 上述两个方法都是用来进行模式匹配的,匹配成功则返回 true,否则返回false。其中,toffset和ooffset分别指明当前字 符串和参数字符串中所要比较的子串的起始索引位置,len指 明比较的长度,而ignoreCase指明比较时是否区分大小写。对 于第一种方法,比较是区分大小写的。 Ex:regionMatches(2, abcdef, 2, 3), 此时“cde”为模式,与indexOf相似。1、字符串 ——String:基本方法
  • 13. 9. equals和equalsIgnoreCase public boolean equals( object str) public boolean equalsIgnoreCase( object str ) 判断两个字符串是否相等,则可以用此方法。相等则 返回 true,不等则返回false,两种方法的区别在于 equalsIgnoreCase不区分字母大小写,而equals则须区分。 10.其他方法 public String concat(String str); 将当前字符串对象与给定的字符串str连接起来。1、字符串 ——String:基本方法
  • 14. public String replace(char oldChar,char newChar) 将串中出现的特定字符用新的字符代替。 public String substring(int beginIndex) public String substring(int beginIndex,int endIndex) 用来得到字符串中指定范围内的子串。 public String toLowerCase() 把串中的所有字符转换成小写 public String toUpperCase() 把串中的所有字符转换成大写1、字符串 ——String:基本方法
  • 15. class StringCopyModify { public static void main(String args[ ]) { String s = new String("We will go further to modify a String by copy! "); System.out.println("From String\"" + s + "\""); String sub1 = s.substring(20); String sub2 = s.substring(0,19); System.out.println(“Get a sub string from index 20 to the end:"+ sub1); System.out.println(“Get a sub string from index 0 to 19:" + sub2); String cons=sub2.concat(sub1); System.out.println(“Concat two sub string into one:\n" + cons); } }1、字符串 ——String:示例
  • 16. 运行结果为:From String “We will go further to modify a String by copy” Get a sub string from index 20 to the end:to modify a String by copy Get a sub string from index 0 to 19:We will go further Concat two sub strings into one: We will go further to modify a String by copy 可见,通过拷贝得到新的字符串是并不改变原字符串的值。1、字符串 ——String:示例
  • 17. StringBuffer( ) 建立一个空串的缓冲区,长度为16。 StringBuffer ( int length) 建立一个长度为length的空串缓冲区。 StringBuffer ( String str) 初始化缓冲区内容为给定的字符串str,并提供另16个字符的空间供再次分配。 类似于Vector1、字符串 ——StringBuffer:创建
  • 18. 除了方法length(),charAt(),getChars()以外,还有以下几种方法。 1. capacity public int capacity( ) 此方法返回字符串缓冲区的长度,即总的可供分配的字符个数。1、字符串 ——StringBuffer:基本方法
  • 19. class demoOfStringBuffer { public void main (String buf [ ] ) { StringBuffer sb = new StringBuffer ("abc"); System.out.println ("buffer=" + sb ); System.out.println ("length=" + sb.length()) System.out.println ( "capacity=" + sb.capacity()); } } 从运行结果我们可以看到为附加处理保留了空间。 注意:capacity()与length()的区别。C:\>java demoOfStringBuffer buffer=abc length=3 capacity=19
  • 20. 2. append public synchronized StringBuffer append (对象类型 对象名) append方法将指定的参数对象转化成字符串,附加在原来的字符串对象之后。 3. insert public synchronized StringBuffer insert (int 插入位置,对象类型 对象名) 在指定的位置插入给出的参数对象所转化而得的字符串。1、字符串 ——StringBuffer:基本方法
  • 21. 4. setChatAt() public synchronized void setCharAt (int index,char ch) 用来设置指定索引index位置的字符值。 5. setLength public synchronized void setLength (int newLength) 如果希望明确地定义字符缓冲区的长度,则可以用此方法。如果newlength大于现在的长度,串尾将补0,如果小于,那么newlength后的字符将丢失。3、字符串 ——StringBuffer:基本方法
  • 22. 1. C/C++的字符串只是简单的以零字符结尾的字符数 组,而Java中,字符串是一个封装的对象,这种处理对于 编程者提供了许多有利之处。 2. C/C++中可以通过指针直接对字符串所在的内存地 址进行操作,并且不对越界情况进行检查,Java中只能通 过类String或StringBuffer所提供的接口对字符串进行操作, 并且要对越界情况进行检查并报告,这样大大增加了安全性。 3. 由于类String和StringBuffer的接口都经明确说明,所以我们可以预知Java中字符串处理的功能;而在C/C++中, 只有通过库函数或者自定义函数对字符串进行处理。 3、字符串 ——Java与C/C++处理字符串的差别
  • 23. 字符类,支持字符的相关操作 作为基本数据类型char的包装类 提供了一些关于char常量的定义 提供了变换大小写的方法 参见JDK文档3、字符串 ——Charactor
  • 24. 从一个字符串析取子字符串 构造方法 StringTokenizer(String str) //缺省分隔符,为空格 StringTokenizer(String str, String delim) //指定分隔符 StringTokenizer(String str,String delim, boolean returnDelims) int countTokens():返回Token的数目 boolean hasMoreTokens():是否还有下一个Token String nextToken():返回下一个Token String nextToken(String delim) :改变分隔符,从当前位置处,继续返回下一个Token。3、字符串 ——StringTokenizer
  • 25. StringTokenizer st = new StringTokenizer("this is a test"); while (st.hasMoreTokens()) { println(st.nextToken()); } 输出结果为: this is a test 3、字符串 ——StringTokenizer