`
梅利强
  • 浏览: 1807 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

java String常用方法

 
阅读更多
以下代码都经过调试过的,不到位的地方请指出来。(Java 1.5)
1.charAt 方法,返回指定index的字符。
String string ="123456789";
char a =string.charAt(2);
System.out.print(a);
   a=3
2.codePointAt 方法,返回指定索引处的字符(Unicode 代码点)。
string ="abc";
int codePoint=string.codePointAt(2);
System.out.print(codePoint);
结果:99
3.codePointCount 字符的长度
引用:
在JDK5.0中,Java引入了对Unicode4.0中所谓"增补码"的支持,这种字符的长度大于2B,因此用char类型无法表示(Java中char类型占2B).
Java的设计者于是利用两个char变量空间来表示这样的一个字符
于是,如果字符串中有这样的字符,则length方法无法精确的表示字符长度 (length方法返回的是String中char的个数) ,于是有了codePointCount方法,利用这个方法可以精确统计出String中字符的数量,考虑到了String中可能含有的"增补码"
4.compareTo 字符串的比较
如果2个字符串相同,返回值为0;
string ="abcdefg";
int codePoint=string.compareTo("ea");
将返回e在ea中的索引0减去e在“abcdefg”中的索引4,所以codePoint=-4
引用:
按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 时才返回 0。
这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设 k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 < 运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k 处两个char 值的差
5.compareToIgnoreCase 忽略大小写

6.indexOf(int ch)
ch:unicode code point,如果字符串中没有ch,则返回-1
String ss = "abcde";
System.out.println(ss.indexOf(2));
System.out.println(ss.indexOf(98));
结果:-1 1
因为2对应的unicode在字符串ss中不存在,所以返回值-1,98对应的unicode 是b,所以返回值是index=1
7.indexOf(String str) 返回参数在字符串中第一次出现的位置索引
string ="abcaabc";
int codePoint=string.indexOf("bc");
结果: index =1
8.indexOf(int ch, int fromIndex)
ch (Unicode)
String string ="abcaabc";
int codePoint=string.indexOf(99, 5);
System.out.println(codePoint);
System.out.println(string.indexOf(99, 5));
结果:
6
2
因为c对应的Unicode为99
indexOf(String str,int fromIndex) 返回从索引fromIndex开始,str第一次出现的位置
String string ="abcaabc";
System.out.println(string.indexOf("bc", 0));
System.out.println(string.indexOf("bc", 5));
结果:
1
5
lastIndexOf(int ch)返回 unicode 在字符串中最后出现时的位置索引
String string ="abcaabc";
System.out.println(    string.lastIndexOf(99));//99 is unicode of c
结果:
6
lastIndexOf(String str)返回 str 在字符串中最后出现时的位置索引
String string ="abcaabc";
System.out.println(string.lastIndexOf("bc"));
结果:5

lastIndexOf(int ch, int fromIndex)返回从0到fromIndex,ch最后出现的位置索引
String string ="abcdafaa";
System.out.println(string.lastIndexOf(97, 4));
返回值<=fromIndex
结果:4

lastIndexOf(int ch, int fromIndex)返回从0到fromIndex,str最后出现的位置索引
String string ="abcbcbcbcbc";
System.out.println(    string.lastIndexOf("bc", 6));
返回值

k <= Math.min(fromIndex, str.length()) && this.startsWith(str, k)
结果:4      
9.offsetByCodePoints(int index,int codePointOffset)
codePointOffset 偏移量
string ="abcaabcdef汉子";
int codePoint=string.offsetByCodePoints(8, 2);
结果:
codePoint=10
引用解释:
一个完整的Unicode字符叫代码点/CodePoint,而一个Java char 叫代码单元code unit;
string对象以UTF-16保存Unicode字符,需要用2个字符表示一个超大字符集汉字,这种表示方式为
Sruuogate,第一个字符叫Surrogate High,第二个就是Surrogate Low
判断一个char是否是Surrogate区的字符,用Character的isHighSurrogate()/isLowSurrogate()方法。
从两个Surrogate High/Low字符,返回一个完整的Unicode CodePoint用Character.toCodePoint()/codePointAt()
一个Code Point,可能需要一个也可能需要两个char表示,因此不能直接使用CharSequence.length()
方法返回一个字符串到底有多少个汉字,而需要用String.codePointCount()/Character.codePointCount()
要定位字符串中的第N个字符,不能直接将n作为偏移量,而需要从字符串头部依次遍历得到,需要
String.offsetByCodePoints()
从字符串的当前字符,找到上一个字符,不能直接用offset实现,而需要
String.codePointBefore(),或String.offsetByCodePoints()
从当前字符,找下一个字符,需要判断当前CodePoint的长度,再计算得到
String.offsetByCodePoints()。
个人测试:如果没有抛出异常,返回值总是index + codePointOffset
10.concat(String str)将参数连接到字符串的末尾

concatenate 如锁链般连续,使连锁,连结
string ="abc";
System.out.print(string.concat("123"));
结果:abc123
如果str的length是0,那么这个String就会被返回。
11.intern 字符串扣留 返回字符串对象的规范化表示形式。
java API解释:
public String intern()
一个初始时为空的字符串池,它由类 String 私有地维护。
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为true。
String string1 = "Too many";
String string2 = " cooks";
String string3="Too many cooks";
String string4 =string1 +string2;
System.out.println(string3==string4);
string4=string4.intern();
System.out.println(string3==string4);
结果:
false
true
12 hashCode 返回字符串的hashCode值
String string0 ="abc";
String string1 ="abc";
System.out.println(string1.hashCode());
System.out.println(string1.hashCode());
结果:
96354
96354
13 contains(CharSequence s)是否包含参数
String string0 ="abcdef";
System.out.println( string0.contains("de"));
结果:true
14 contentEquals(CharSequence cs)
将此字符串与指定的 CharSequence 比较。当且仅当此 String 与指定序列表示相同的 char 值序列时,结果才为 true。
参数 cs - 要与此 String 比较的序列
返回:如果此 String 与指定序列表示相同的 char 值序列,则返回 true;否则返回 false。
String string0 ="abcdef";
System.out.println( string0.contentEquals("abcdef"));
结果:true
15 contentEquals(StringBuffer sb)
将此字符串与指定的 StringBuffer 比。相同,true,否则:false
String string0 ="abcdef";
System.out.println( string0.contentEquals(new StringBuffer("abcdef")));
结果:true
16 getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将当前字符串的部分字符复制到目标自负数组dst中,从srcBegin(包含在内)到srcEnd(不包含在内)之间的字符复制到目标字符数组中的字符从dstBegin位置开始存放.
String ss="hello,word";
char dst[]={'a','b','c','d','e','f'};
ss.getChars(4,6,dst,3);
System.out.println(dst);
结果 abco,f

17.getBytes(String charsetName);
String ss = "abcde";
byte dst[] = new byte[5];
try {
dst = ss.getBytes("GB2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
for (int i = 0; i < dst.length; i++) {

System.out.print(i==4?dst[i]:dst[i]+",");
}
}
结果:97,98,99,100,101
18 getBytes
String ss = "abcde";
byte dst[] = new byte[5];
dst = ss.getBytes();
for (int i = 0; i < dst.length; i++) {
System.out.print(i==4?dst[i]:dst[i]+",");
}
结果:97,98,99,100,101
startsWith(String perfix) 是否以perfix开头,yes 返回true ,no返回false
String string ="abcbd";
System.out.println(    string.startsWith("abc"));
System.out.println(    string.startsWith("Ab"));
结果:true
false

startsWith(String prefix, int toffset)偏移toffset,是否以perfix开头,yes 返回true ,no返回false
String string ="abcde";
System.out.println(    string.startsWith("cd", 2));
包含toffset 对应的字符串
结果:true
endsWith(String suffix)是否以suffix结尾,yes 返回true ,no返回false
String string ="abcde";
System.out.println(    string.endsWith("e"));
结果:true
trim()去掉字符串的前后空格
String string =" abc ";
System.out.println(string.length()+","+    string.trim().length());
结果:5,3
[/size][size=small][size=xx-small][/size]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics