1.
compareTo方法
优先比较两个字符串相同位置字符编码差值差值不为0时返回第一个差值
差值都为0时返回两个字符串长度的差值
compareToIgnoreCase方法
IgnoreCase忽略大小写
与compareTo方法相近只不过在比较字母时忽略了大小写
public static void A(){
String str = "aa";
String anotherString = "AAA";
Object objStr = str;
System.out.println( str.compareTo(anotherString) );
System.out.println( str.compareToIgnoreCase(anotherString) );
// System.out.println(objStr);
System.out.println( str.compareTo(objStr.toString()));
//自己和自己比较
}
2.
自定义方法传入字符串和下标
利用substring()方法
传入一个int返回int之后的字符串
传入两个int返回int1到int2之间的字符串不包括int2
public static void B(){
String str = "this is Java";
System.out.println(removeCharAt(str, 3));
}
public static String removeCharAt(String s, int pos) {
return s.substring(0,pos)+s.substring(pos+1);
}
3.
StringTokenizer
此类实现了Enumeration<Object>接口
传入字符串时默认以空格为标识将字符串分割
传入字符串和标识字符时以传入的标识字符为标识将字符串分割
由于其实现了Enumeration<Object>接口
可以推测其原理是将字符串拆分成一个个元素以标识字符为切割位
StringTokenizer应该也有Enumeration<Object>的hasMoreElements()方法和nextElement()方法
public static void C(){
String str = "A B C D, E, F, ";
StringTokenizer st = new StringTokenizer(str);
System.out.println("----- 通过空格分隔 ------");
while (st.hasMoreElements()) {
System.out.println(st.nextElement());
}
System.out.println("----- 通过逗号分隔 ------");
StringTokenizer st2 = new StringTokenizer(str, ",");
while (st2.hasMoreElements()) {
System.out.println(st2.nextElement());
}
}
4.
regionMatches()方法
方法传入参数为
boolean(不传入时默认为false,意义是是否区分大小写),
int(第一个字符串开始比较位置),
String(要比较的字符串),
int(要比较字符串开始比较位置),
int(比较区域长度)
注意当比较区域长度大于字符串长度即便字符串内比较区域相等仍会返回false
测试两个字符串区域相等
public static void D(){
String first_str = "Welcome";
String second_str = "welcome";
boolean match1 = first_str.
regionMatches(0, second_str, 0, 7);
boolean match2 = first_str.
regionMatches(true, 0, second_str, 0, 7); //第一个参数 true 表示忽略大小写区别
System.out.println("区分大小写返回值:" + match1);
System.out.println("不区分大小写返回值:" + match2);
}
5.测试引用对象和直接利用关键字传入字符串的性能比较
public static void E(){
long startTime = System.currentTimeMillis();
for(int i=0;i<5000000;i++){
String s1 = "hello";
String s2 = "hello";
}
long endTime = System.currentTimeMillis();
System.out.println("通过 String 关键词创建字符串"
+ " : "+ (endTime - startTime)
+ " 毫秒" );
long startTime1 = System.currentTimeMillis();
for(int i=0;i<5000000;i++){
String s3 = new String("hello");
String s4 = new String("hello");
}
long endTime1 = System.currentTimeMillis();
System.out.println("通过 String 对象创建字符串"
+ " : " + (endTime1 - startTime1)
+ " 毫秒");
}
测试如下
通过 String 关键词创建字符串 : 2 毫秒
通过 String 对象创建字符串 : 29 毫秒
可以看到通过 String 关键词创建字符串性能更好
同理我们也可以测试intern()方法及String和StringBuffer连接字符串的性能比较及优化
public static void F(){
String variables[] = new String[500000];
for( int i=0;i <500000;i++){
variables[i] = "s"+i;
}
long startTime0 = System.currentTimeMillis();
for(int i=0;i<500000;i++){
variables[i] = "hello";
}
long endTime0 = System.currentTimeMillis();
System.out.println("直接使用字符串: "+ (endTime0 - startTime0) + " ms" );
long startTime1 = System.currentTimeMillis();
for(int i=0;i<500000;i++){
variables[i] = new String("hello");
}
long endTime1 = System.currentTimeMillis();
System.out.println("使用 new 关键字:" + (endTime1 - startTime1) + " ms");
long startTime2 = System.currentTimeMillis();
for(int i=0;i<500000;i++){
variables[i] = new String("hello");
variables[i] = variables[i].intern();
}
long endTime2 = System.currentTimeMillis();
System.out.println("使用字符串对象的 intern() 方法: "
+ (endTime2 - startTime2)
+ " ms");
}
public static void H(){
long startTime = System.currentTimeMillis();
for(int i=0;i<5000;i++){
String result = "This is"
+ "testing the"
+ "difference"+ "between"
+ "String"+ "and"+ "StringBuffer";
}
long endTime = System.currentTimeMillis();
System.out.println("字符串连接"
+ " - 使用 + 操作符 : "
+ (endTime - startTime)+ " ms");
long startTime1 = System.currentTimeMillis();
for(int i=0;i<5000;i++){
StringBuffer result = new StringBuffer();
result.append("This is");
result.append("testing the");
result.append("difference");
result.append("between");
result.append("String");
result.append("and");
result.append("StringBuffer");
}
long endTime1 = System.currentTimeMillis();
System.out.println("字符串连接"
+ " - 使用 StringBuffer : "
+ (endTime1 - startTime1)+ " ms");
}
6.
除此之外我们还常用有关字符串方法有
字符串查找用方法 indexOf()
字符串分割用方法split()
用 String toUpperCase() 方法将字符串从小写转为大写