javaString类常⽤⽅法
1、equals():⽐较两个字符串是否相等
它具有如下的⼀般形式:boolean equals(Object str) str是⼀个⽤来与调⽤字符串(String)对象做⽐较的字符串(String)对象。如果两个字符串具有相同的字符和长度,它返回true,否则返回false。这种⽐较是区分⼤⼩写的。
2、equalsIgnoreCase( ):忽略⼤⼩写的两个字符串是否相等⽐较
当⽐较两个字符串时,它会认为A-Z和a-z是⼀样的。 其⼀般形式如下:boolean equalsIgnoreCase(String str) str是⼀个⽤来与调⽤字符串(String)对象做⽐较的字符串(String)对象。如果两个字符串具有相同的字符和长度,它也返回true,否则返回false。
3、toString():转换成String类型
Object object = getObject(); System.out.String()); 注意:必须保证object不是null值,否则将抛出NullPointerException异常。 采⽤这种⽅法时,通常派⽣类会覆盖Object⾥的toString()⽅法。
4、String:转换成String类型
(String)object:这是标准的类型转换,将object转成String类型的值。 注意:类型必须能转成String类型。因此最好⽤instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastException异常。 因定义为Object 类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。 如: Object obj = new Integer(100); String strVal = (String)obj; 在运⾏时将会出错,因为将Integer类型强制转换为String类型,⽆法通过。 但是, Integer obj = new Integer(100); String strVal = (String)obj; 如是格式代码,将会报语法错误。此外,因null值可以强制转换为任何java类类型,(String)null也是合法的。
5、String.valueOf():转换成String类型(不⽤担⼼object是否为null值这⼀问题)
注意:当object为null 时,String.valueOf(object)的值是字符串”null”,⽽不是null。
6、split():分隔符
1、如果⽤“.”作为分隔的话,必须是如下写法,String.split("\.")
2、如果⽤“|”作为分隔的话,必须是如下写法,String.split("\|") “.”、“|”、"" 和"+“都是转义字符,必须得加”\";
3、如果在⼀个字符串中有多个分隔符,可以⽤“|”作为连字符,⽐如,“acount=? and uu =? or n=?”,把
三个都分隔出来,可以⽤String.split(“and|or”);
例如:String[] aa = “aaa|bbb|ccc”.split("\");
for (int i = 0 ; i <aa.length ; i++ ) {
System.out.println("–"+aa[i]);
}
7、subString():截取字符串中的⼀段字符串String str;
(1)str=str.substring(int beginIndex);
截取掉str从⾸字母起长度为beginIndex的字符串,将剩余字符串赋值给str;
(2)str=str.substring(int beginIndex,int endIndex);
截取str中从beginIndex开始⾄endIndex结束时的字符串,并将其赋值给str;
8、charAt():返回指定索引处char值
public char charAt(int index) char s = str.charAt(1);
9、toLowerCase():将所有在此字符串中的字符转化为⼩写(使⽤默认语⾔环境的规则)
public String toLowerCase() String newStr = LowerCase();
10、indexOf():指出 String 对象内⼦字符串的开始位置
1、int indexOf(String str) :返回第⼀次出现的指定⼦字符串在此字符串中的索引。
2、int indexOf(String str, int startIndex):从指定的索引处开始,返回第⼀次出现的指定⼦字符串在此字符串中的索引。
3、int lastIndexOf(String str) :返回在此字符串中最右边出现的指定⼦字符串的索引。
4、int lastIndexOf(String str, int startIndex) :从指定的索引处开始向后搜索,返回在此字符串中最后⼀次出现的指定⼦字符串的索引。
注意:如果没有到⼦字符串,则返回-1。
如果 startindex 是负数,则 startindex 被当作零。如果它⽐最⼤的字符位置索引还⼤,则它被当作最
⼤的可能索引。
例如:String s = “xXccxxxXX”;
// 从头开始查是否存在指定的字符 //结果如下
System.out.println(s.indexOf(“c”)); //2
// 从第四个字符位置开始往后继续查,包含当前位置
System.out.println(s.indexOf(“c”, 3)); //3
//若指定字符串中没有该字符则系统返回-1
System.out.println(s.indexOf(“y”)); //-1
System.out.println(s.lastIndexOf(“x”)); //6
11、replace和replaceAll
(1)replace的参数是char和CharSequence,即可以⽀持字符的替换,也⽀持字符串的替换(CharS
equence即字符串序列的意思,说⽩了也就是字符串); (2)replaceAll的参数是regex,即基于规则表达式的替换,⽐如:可以通过replaceAll("\d", “")把⼀个字符串所有的数字字符都换成星号; 相同点:都是全部替换,即把源字符串中的某⼀字符或字符串全部换成指定的字符或字符串; 不同点:
(1)replaceAll⽀持正则表达式,因此会对参数进⾏解析(两个参数均是),如replaceAll("\d", "”),⽽replace则不
会,replace("\d","*")就是替换"\d"的字符串,⽽不会解析为正则。 (2)“\”在java中是⼀个转义字符,所以需要⽤两个代表⼀个。例如System.out.println( “\” ) ;只打印出⼀个""。但是“\”也是正则表达式中的转义字符,需要⽤两个代表⼀个。所以:\\被java转换成\,\⼜被正则表达式转换成\,因此⽤replaceAll替换“\”为"\",就要⽤replaceAll("\\","\\\\"),⽽replace则replace("\","\\")。 (3)如果只想替换第⼀次出现的,可以使⽤replaceFirst(),这个⽅法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第⼀次出现的字符串。 说到正则表达式,有个例⼦就能很好的解释replaceAll的⽤法。即替换空格 String test = “wa n\tg_p\te\tn g”; test = placeAll("\t|\\t|\u0020|\u3000", “”);//去掉空格 System.out.println(test); 其中test =
12、getBytes():得到⼀个系统默认的编码格式的字节数组
都是将⼀个string类型的字符串转换成byte类型并且存⼊⼀个byte数组中。在java中的所有数据底层都是字节,字节数据可以存⼊到byte数组。 UTF-8每个汉字转成3bytes,⽽GBK转成2bytes,所以要说明编码⽅式,否则⽤缺省编码。 Bytes(String decode)
byte[] b_gbk = “中”.getBytes(“GBK”); byte[] b_utf8 = “中”.getBytes(“UTF-8”); byte[] b_iso88591 =
“中”.getBytes(“ISO8859-1”); 将分别返回"中"这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表⽰,此时 b_gbk的长度为2, b_utf8的长度为3, b_iso88591的长度为1。 new String(byte[], decode)实际是使⽤指定的编码decode来将byte[]解析成字符串. String s_gbk = new String(b_gbk,“GBK”); String s_utf8 = new String(b_utf8,“UTF-8”); String s_iso88591 = new
String(b_iso88591,“ISO8859-1”); 通过输出s_gbk、s_utf8和s_iso88591,会发现s_gbk和s_utf8都是"中",⽽只有s_iso88591是⼀个不被识别的字符(可以理解为乱码),为什么使⽤ISO8859-1编码再组合之后,⽆法还原"中"字?原因很简单,因为ISO8859-1编码的编码表根本就不包含汉字字符,当然也就⽆法通过"中".getBytes(“ISO8859-1”);来得到正确的"中"字在ISO8859-1中的编码值了,所以,再通过new String()来还原就更是⽆从谈起。因此,通过Bytes(String decode)⽅法来得到byte[]时,⼀定要确定decode的编码表中确实存在String表⽰的码值,这样得到的byte[]数组才能正确被还原。
13、StringBuffer的append⽅法
StringBuffer buf=new StringBuffer(“Hard “); String aString = “Waxworks”; buf.append(aString,3,4); 原⽂说明:这个操作将aString的从索引位置3开始的由四个字符组成的⼦串追加到StringBuffer对象buf中。然后buf对象就会包含字符 串"Hard work”。 请注意,这个代码的实际运⾏结果是: buf对象包含的字符串为"Hard w”。 具体原因引⽤源代码: public synchronized StringBuffer append(CharSequence s, int start, int end) { super.append(s, start, end); return this; } 根据运⾏结果分析,StringBuffer对象的append()⽅法的参数,如果是String类型,那么,后⾯取⼦串的操作实际是从索引3开始,取值到索引4之前的串。如果append的语句改成 buf.append(aString,3,3); ,那么没有添加aString的⼦串,即 buf包含的字符实际还是"Hard “。如果此语句再改成
buf.append(aString3,2); ,那么系统会抛出"IndexOutOfBoundsException"的异常! 但是,如果append()的参数是字符数组
(char[]),那么结果就如原⽂所述,buf将包含串"Hard work”. 代码如下: StringBuffer buf=new StringBuffer("Hard “); char[] text ={‘W’,‘a’,‘x’,‘w’,‘o’,‘r’,‘k’,‘s’}; buf.append(text ,3,4); // buf包含串"Hard work” 具体原因引⽤源代码:public synchronized StringBuffer append(char str[], int offset, int len) { super.append(str, offset, len); return this; }
JAVA 中 Stringbuffer 有append()⽅法 Stringbuffer其实是动态字符串数组 append()是往动态字符串数组添加,
跟“xxxx”+“yyyy”相当那个‘+’号 跟String不同的是Stringbuffer是放⼀起的 String1+String2 和
Stringbuffer1.append(“yyyy”)虽然打印效果⼀样,但在内存中表⽰却不⼀样 String1+String2 存在于不同的两个地址内存Stringbuffer1.append(Stringbuffer2)放再⼀起
/**
*
* @param c : 要求格式 "up"⼤写,"lo"⼩写
* @param str :待处理字符串
* @return
* @Description
*/
public String strToUpOrLo(String c,String str) {
String s = ",A, b,c ,e,";
//根据输⼊要求格式转化字符⼤⼩写
if("up".equals(c)) {
s = s.toUpperCase();
}else if("lo".equals(c)) {
s = s.toLowerCase();
}else {
System.out.println("输⼊要求格式不合法!");
return s;
}
/
/整理字符串为英⽂“,”间隔,
s = s.replaceAll(",", ",");
//去除多余空格
s = s.replaceAll(" ", "");
//去除前后多余逗号
dsWith(",")) {
s = s.substring(0, s.length() - 1);
}
if(s.startsWith(",")) {java replace方法
s = s.substring(1, s.length());
}
return s;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论