字符串类Sring
字符串时由字符构成的一个序列,在JAVA中,字符串是一个对象;
1、字符串的构造
1)从字符串直接量创建一个字符串
String 字符串名 = new String(字符串直接量);
如:String str = new String(”welcome to java“);
2)将字符串直接量看成String对象
String str = ”welcome to java“;
3)用字符数组创建一个字符串
char[] chars = {'G','O','O','D' };
String str = new String (chars);
2、不可变字符串 和 限定字符串
1)String对象是不可变的,一旦创建,他的内容是不能改变;
如:String s = “java”; s = "html";
不能改变原来s创建的字符串对象,只是将变量s引向了新对象“html”,原对象无法再继续访问;
2)限定字符串:jvm为提高效率并节约内存,会对具有相同字符串序列的字符串直接量使用同一个实例;
3、字符串的比较
java.lang.String | |
+equals (s1:String): boolean
+equalsIgnoreCase (s1:String ): boolean
+compareTo (s1:String): int
+compareToIgnoreCase (s1:String): int
+regionMatches (index: int ,s1:String, s1Index:int , len:int ) :boolean
+regionMatchesIgnoreCase (index: int , s1:String, s1Index:int , len:int ) :boolean
+startWith (prefix:String) : boolean
+endWtih (prefix:Sring) :boolean | ○如果这个字符串等于字符串s1,则返true; ○ 同上,不过忽略大小写; ○ 返回一个大于0,等于0、小于0的整数,表明这个字符是大于、等于、或小于s1; ○ 同上,不过忽略大小写 ○ 如果这个字符串指定的子域精确匹配字符串s1中指定的子域,则返回true; ○ 同上,不过忽略大小写; ○如果这个字符串以指定前缀开始,返回true; ○如果这个字符串以指定后缀开始,返回true; |
String s1 = ....; String s2 = .....;
boolean a = s1.equals(s2);
2)运算符==只能检测2个操作数是否指向同一个对象;
4、字符串长度、获取字符,组合字符串;
java.lang.String | |
+length ( ):int +charAt (index:int ):char +conat (s1:String) :String | ○返回这个字符串的字符个数; ○返回这个字符串的指定下标处的字符; ○返回连接这个字符串和s1 所构成的新字符串; |
1) String s3 = s2.conat(s1) 等价于 String s3 = s2+s1
5、获取字串
java.lang.String | |
+substring (beginIndex: int) : Sring +substring (beginIndex: int, endIndex: int) : String | ○返回这个字符串中以指定beginIndex开始, 并延续到结尾(或endIndex)的字串; |
6、 字符串的转、替换和分隔
java.lang.String | |
+toLowerCase( ) :String +toUpperCase( ) :String +trim ( ) :String +split ( delimiter :String):String[ ] +replace (oldChar:char, newChar:char) :String +replaceFirst (oldString:String, newString:String) :String +replaceAll (oldString:String, newString:String) :String | ○返回键所有字符转化为小写的新字符串; ○返回键所有字符转化为大写的新字符串; ○返回去掉两端的空白字符之后的新字符串; ○返回用定界符分隔的字串 所构成的一个字符串数组; ○用一个新字符代替该字符串所有匹配的旧字符串; ○用一个新字串替换第一个匹配的字串; ○用一个新字串替换所有匹配的字串; |
2)matches类可以匹配一套遵循从某种模式的字符串
“java is fun”.matches ( "java.*") // 结果为true;其中java.*是一个正则表达式;
3)split、repalceAll、replaceFirst 可以和正则表达式结合使用;
String s = "a+b$#c".repalce("[$+#]","NNN")
//结果为 s=“aNNNbNNNNNNc”,其中[$+#]也是一个正则表达式;
7、找出字符串中的某个字符或字串
java.lang.String | |
+indexOf (ch: char): int +indexOf (ch: char , formIndex :int):int +indexOf (s:String) :int +indexOf (s:STring, formIndex:int):int +lastIndex (ch:char):int +lastIndex (ch:char , formIndex: int ):int +lastIndex (s:String):int +lastIndex (s:String , formIndex: int ):int | ○返回第1次出现ch的下标,如果不匹配返回-1; ○返回字符串formIndex之后第1次出现ch的下标; ○返回第1次出现s的下标,如果不匹配返回-1; ○返回最后1次出现ch的下标,如果不匹配返回-1; ○返回字符串自formIndex最后1次出现ch的下标; ○返回最后1次出现s的下标,如果不匹配返回-1; |
8、字符串和数组之间的转换
1)字符串 → 字符数组
①toCharArray方法
如:char[] chars = "java".toCharArray(); // 获取 chars[] = {'j','a','v','a'};
②getChars (int srcBegin,int scrEnd ,char[] dst, int dstBegin)
将下标从scrBesign到scrEnd-1的字串复制 到字符数组dst中 下标从dstBegin开始的地方;
如:
char[] dst = {'j','a','v','a'};
"CS2340".getChars(1,4,dst[],1) // dst[] = {'j','a', 'S','2','3','4', 'v','a'};
2)字符数组 → 字符串
构造方法String(char[ ]) 或 方法valueOf(char[ ])
如:String str = new String ( char[ ] {'j','a','v','a'} );
或 String str = String.valueOf ( char[ ] {'j','a','v','a'} );
9、将字符和数值转换为字符串
java.lang.String | |
+valueOf (c:char):String +valueOf (data:char[ ]):String +valueOf (d:double):String +valueOf (f:float):String +valueOf (i:int):String +valueOf (b:boolean):String | ○返回包含字符c的字符串; ○返回包含数组中字符的字符串; ○返回表示double值的字符串; |
Double.parseDouble (str) 或 Integer.parseInt (str);
10、格式化字符串
String类中的format方法
String.format(format,item1,item2.....itemk)
如:
String 2 = String.format("%5.2f",45.776);
字符类Character
Character类中大多数方法都是静态方法;
使用时,应先构建对象;Character char = new Character();
java.lang.Character | |
+Character (value :char) +charValue () : char | ○使用char值构建一个字符对象; ○从这个对象返回char值; |
+compareTo (anotherCharacter : Char) :int +equals(anotherCharacter : Char): boolean | ○将这个字符与其他字符比较; ○如果这个字符等于另一个字符返回true; |
+isDigit (ch : char ) : boolean +isLetter(ch:char) : boolean +isLetterOrDigit(ch:char) : boolean +isLowerCase(ch:char) : boolean +isUpperCase(ch:char) : boolean | ○如果指定字符是一个数字,返回true; ○如果指定字符是一个字符,返回true; ○如果指定字符是一个数字或字母; ○如果指定字符是一个小写字母; ○如果指定字符是一个大写字母; |
+toLowerCase(ch:char) : char +toUpperCase(ch: char) : char | ○返回指定字母的小写; ○返回指定字母的大写; |
9.3 StringBuilder / StringBuffer 类
1、String类一旦确立,它的值就确定了,但是可以给一个StringBuilder或StringBuffer类添加、插入、追加新的内容;
1) 如果是多任务并发访问,使用StringBuffer类;
2)如果是单任务访问,使用StringBuilder类;
java.lang.StringBuilder | |
+StringBuilder +StringBuilder (capacity : int) +StringBuilder (s:String) | ○构建一个容量为16的字符生成器; ○构建一个指定容量的字符生成器; ○构建一个带指定字符串的字符生成器; |
2、修改StringBuilder中的字符
java.lang.StringBuilder | |
+append (data : char[]) :StringBuilder +append (data:char[] , offset: int , len: int ):StringBuilder +append ( v: aPrimitiveType) :StringBuilder +append ( s: String) : StringBuilder +delete(stractIndex: int ,endIndex:int): StringBuilder +deleteCharAt (index :int) : Stringbuilder +insert (index: int, data: char[] , offset: int , len: int):Stringbuilder +insert (offset: int , data: char[]): Stringbuilder +insert (offset: int , v: aPrimitiveType) :Stringbuilder +insert (offset: int ,s:String) :Stringbuilder +replace (startIndex: int , endIndex: int , s: String):Stringbuilder +reverse () :StringBuilder +setCharAt (index: int, ch :char) : void | ○追加一个char型数组; ○追加data中的子数组; ○追加一个基本型值; ○追加一个字符串; ○删除stractIndex到endIndex-1的字符; ○删除指定下标的字符; ○在指定下标处,插入数组中数据子数组; ○在指定下标处,插入数组; ○在指定下标处,插入转换成字符串的值; ○在指定下标处,插入字符串; ○使用特定字符,替换字符生成器中stractIndex 到endIndex - 1 的字符; ○颠倒生成器中的字符; ○在生成器特定下标处设置一个新字符; |
3、StringBuffer中处理字符生成器的方法
java.lang.StringBuilder | |
+toString () : String +capacity : int +charAt (index: int) :char +length () :int +setLength (newlength :int) : void +subString (stractIndex: int): String +subString (stractIndex: int, endIndex:int): String +trimToSize () :void | ○重字符生成器返回以字符串对象; ○返回这个字符串生成器的容量; ○返回指定下标处的字符; ○返回这个生成器中字符的个数; ○在这个生成器中设置新的长度; ○返回从stractIndex开始的字符串; ○返回stract到end-1 的字符串; ○减少字符串生成所用的储存大小; |
2)如果容量过大,会造成内存浪费,可以使用trimToSize方法将容量降到实际大小;
9.4 命令行参数
1、运行程序时,可以从命令行给main方法传递字符串参数,
如: java TestMain arg0 arg1 arg2 // 该命令行用三个字符串arg0 、arg1、arg2启动程序TestMain;
2、如果字符串参数包含空格,就必须用“ ”括住该字符串;
3、当调用main方法时,java解释器会创建一个数组储存命令行参数,然后将数组传递给args,如:args = new arg[n];
4、在命令行中,要用“*”代替*,因为*代表当前目录下所有的文件;