在编程中字符串是最常使用的,因此熟练掌握如何操纵字符串是至关重要的。而操作字符串一般而言就分为字符串相关的类所进行的操作以及正则表达式。准确的说,应该是字符串的相关类将字符串中的字符仅仅看成是字符对象进行操作,而不管它是什么。而正则表达式则可以辨别字符串中的字符是数字还是字母,或者是符号。因此,字符串的相关类的所有操作基本都是不能辨别字符的操作。要实现字符串辨别字符的操作必须要使用正则表达式。这里注意,字符串的相关类的一些方法有引进正则表达式到自己的方法中进行相关操作。
对于字符串的相关类,有String,StringBuffer,StringTokenizer,StringBuilder,Character,CharBuffer,CharSequence等。
下面的是String的相关操作。
在字符串的相关类中,最主要的核心类就是String类。String类几乎包含所有操作字符串的所有方法,但是相对于正则来说就不是很灵活。String类包含的功能大致上可以分为增,删,查,改。
使用+进行的字符串之间的操作其实是通过StringBuffer进行的,这里+,=在操作String上其实对+进行了操作符重载,尽管java并不能对操作符进行重载。同时注意,String是只读的,所以字符串的操作其实是通过中间字符串变量进行的操作。
得到字符串的方法使用构造器String()进行,构造器有很多种方式可以使用。String.substring(),String.subsequence()可以得到子串。String.intern()返回字符串的唯一索引。String.valueOf()返回各种类型数值的字符串形式。String.copyValueOf(char[])可以得到可以得到char[]的字符串形式。(String.getBytes(),String.getChars(),String.toCharArray(),String.toLowerCase(),String.toUpperCase()可以得到String的其他形式。)(String.length()得到的是字符串中字符的个数,而String.offsetByCodePoints()返回长度,但是他是考虑增补码的,因为jdk5.0,中增加了unicode4.0)
字符串的增删是通过StringBuffer以及+,=实现的。就是说StringBuffer.append(),StringBuffer.delete()。String.concat(String)。String.trim()去掉头尾的空格键。
字符串的查找功能:String.charAt(int),String.indexOf(unicode code point),Strng.indexOf(Unicode code point,startInt),String.indexOf(String),String.indexOf(String,startInt),String.lastIndexOf(unicode code point),String.lastIndexOf(unicode code point,startInt),String.lastIndexOf(String),String.lastIndexOf(String,startInt)。String.compareTo(String),String.compareToIgnoreCase(String)。对于Unicode部分由方法:String.codePointAt()返回代码点数字,String.codePointCount()返回字符串大小,String.codePointBefore()返回索引之前的所有代码点。
字符串的改功能:String.relpace(),String.replaceAll(),String.replaceFirst()
用于判断的方法有String.isEmpty()判断是否为空。String.contains(CharSequence)判断是否包含CharSequence。String.contentEquals(CharSquence)比较内容是否一样。注意String.equals()比较的是对象是否一样而不是内容。String.equalsIgnoreCase()比较内容,同时它是忽略大小写的。String.startsWith(),String.endsWith()判断开头结尾。String.regionMathes()限定区域内判断两个字符串是否相等。
String.matches(regex)使用的是Pattern.matches(regex)作为内部方法的,就是说使用的是正则表达式的方法。String.split(String),String.split(String,int)通过正则表达式的方法分割字符串,
(String.format()未完成)
下面的是StringBuffer的相关操作。
StringBuffer相对于String来说更加简单。他的方法构成也更为简单。同时StringBuffer不像String的操作,StringBuffer的操作不会生成对象,而是直接操作,所以内存使用上优于String。与String类似,StringBuffer的方法分为增,删,查,改。
StringBuffer的属性,如容量,ensureCapacity(),setLength(),得到字符getChars(),得到相反序列的字符串StringBuffer.reverse(),得到子串substring(),subsequence(),
增删功能:使用append(),appendCodePoint(),delete(),deleteCharAt(),insert()。trimToSize()将存储空间缩小到和字符长度一样。
查功能:charAt(),codePointAt(),codePointCount(),codePointBefore()。indexOf(),lastIndexOf(),
改功能:replace(),setCharAt()
这里注意StringBuffer功能比String差,但是比String快,StringBuilder功能与StringBuffer一样,但是比StringBuffer快。StringBuffer,StringBuilder都是线程安全的字符串缓冲。
(StringBuffer.offsetByCodePoints()未完成)
下面的是Character,对于Character来说其实是相对简单的,因为它的作用就是将Character对象里面所包含的char值进行操作。这里不详细介绍。与之对应的CharBuffer是县城缓冲,但是CharBuffer没有字符串操作。
其实这里应该注意,对于XXBuffer的都是Buffer的子类,某类型的缓冲。
下面是CharSequence,CharSequence是所有字符序列Interface,是所有String相关的接口。
下面是StringTokenizer,StringTokenizer是字符串分词器,功能与split()类似,但是更为完善。StringTokenizer的默认分隔符是\n,\t,\r。也就是说new StringTokenizer(String)手机用的是默认的分隔符。而new StrignTokenizer(String,delimiter)指定分隔符。countTokens()返回数量。hasMoreTokens()返回是否还有分隔符,hasMoreElements()返回是否还有分隔符。nextToken(),nextElement()从当前位置到下一个分隔符的字符串。nextToken(newDelimiter)返回当前到下一个新指定的分隔符的字符串。
下面是StringBuilder,与StringTokenizer的分割相对应,StringBuilder是用于连接字符串的(就这一点而言,其实StringBuffer也可以实现。)。StringBuilder的方法与StringBuffer类似。
String,StringBuffer,StringBuilder的比较:StringBuffer是多线程的线程安全的,而StrignBuilder是线程不安全的。相对而言,就速度StringBuilder>StringBuffer>String。使用场合:操作少量数据时使用String。单线程操作字符串缓冲区下大量字符串使用StringBuilder,多线程操作字符串缓冲区下字符串使用StringBuffer。
就String的相关类操作字符串方面,一般使用以上方法即可。
String的相关类只可以进行字符串里面的字符对象类型无关的操作,尽管有加入正则的一些方法,但是操作上还是不够的。需要用到正则表达式进行字符串的操作。
正则表达式可以 (未完成)
(未完成)