String的特点:
1.String使用final修饰,不能被继承,在字符串的底部封装了字符数组以及针对字符数组的操作。
2.字符串对象一旦被创建内容将不会改变(这个是对重用对象来说的,后面将会说道原因),但是字符串的引用可以重新赋值。
3.java语言中的字符串使用Unicod编码方式,任何一个字符串对应两个字节的长度。
关于字符串对象一旦被创建就不能被改变的原因解释如下:
由于字符串的重用的概率远远大于修改的概率,因此java中规定字符串对象一旦被创建,就不能改变。我们都知道基本数据类型存放在栈里面,引用数据类型存放在堆里面,当程序中多次出现相同的字符串对象的时候,为了降低内存的开销,java中提供一个常量池(用来存放字符串字面量),建立的引用指向同一个内存区,因此字符串对象一旦被创建,就不能改变。 如果使用new的话将会强制的创建一个对象。
String常用的方法:
1.获取字符串长度:
package Day01;
/**
* int length()
* 获取字符串长度
* 无论是中文还是英文每个字符都是一个长度
* @author 123
*
*/
public class StringDemo1 {
public static void main(String[] args) {
String str="我爱学习";
System.out.println(str.length());
}
}
2.indexOf方法,该方法有几个重载方法:
package Day01;
/**
* int indexOf(String str)
* 该方法用来查找给定的字符串在当前字符串中的位置
* 如果有返回下标,如果没有返回-1。
* 该方法有几个重载方法
* @author 123
*
*/
public class StringDemo2 {
public static void main(String[] args) {
String str="thinking in java";
int index=str.indexOf("in");
System.out.println("index:"+index);
/**
* 重载方法允许从指定的位置开始查找
*/
index=str.indexOf("in",3);
System.out.println("index:"+index);
/**
* 查找最后一次出现字符串的位置
*/
index=str.lastIndexOf("in");
System.out.println("index:"+index);
}
}
3.字符串的截取:
package Day01;
/**
* String substring(int start,int end)
* 截取字符串,从指定的位置(start)开始截取到指定的位置
* end
* java api 有一个特点,通常用两个数字表示范围,都是
* 含头不含尾
* @author 123
*
*/
public class StringDemo3 {
public static void main(String[] args) {
String str="thinking in java";
/**
* 截取字符串
*/
String str1=str.substring(0, 10);
System.out.println("sub:"+str1);
/**
* String substring(一个参数)
* 表示从这个数字开始截取到字符串的末尾
*/
String str2=str.substring(1);
System.out.println("sub:"+str2);
}
}
4.去除字符串两边的空白字符
package Day01;
/**
* String trim()
* 去除当前字符串两边的空白字符
* @author 123
*
*/
public class StringDemo4 {
public static void main(String[] args) {
String str=" helloworld ";
String trim=str.trim();
System.out.println(str);
System.out.println(trim);
}
}
5.返回指定位置的字符:
package Day01;
/**
* char charAt(int index)
* 返回指定索引位置的字符
* @author 123
*
*/
public class StringDemo5 {
public static void main(String[] args) {
String str ="thinking in java";
//查看第五个字符是什么?
String str1=str.substring(4, 5);
System.out.println(str1);
char c=str.charAt(4);
System.out.println(c);
}
}
6.判断字符串是否是以指定的字符结尾或者开始:
package Day01;
/**
* booelan startWith(String Str)
* boolena endWith(String str)
* 判断当前字符串是否是以指定的字符串开始或者结尾
* @author 123
*
*/
public class StringDemo6 {
public static void main(String[] args) {
String str="thinking in java";
boolean start=str.startsWith("thi");
System.out.println("strat:"+start);
boolean end=str.endsWith("java1");
System.out.println("end:"+end);
}
}
7.字符串大小写的转化:
package Day01;
/**
* String toUpperCase()
* String toLowerCase()
* 将当前字符串的英文转化为全部大写或者小写
* 只支持英文
* @author 123
*
*/
public class StringDemo7 {
public static void main(String[] args) {
String str="我爱Java";
String upper=str.toUpperCase();
System.out.println("转化为大写:"+upper);
String lower=str.toLowerCase();
System.out.println("转化为小写:"+lower);
}
}
StringBUilder的用法:由于java中规定了字符串对象一旦被创建就不能被改变,但是如果要改变的话,就需要重新创建新的字符串的对象,这样的话,内存中将会不断的开辟内存空间,与c语言不同的是,java中不在使用的对象有垃圾回收机制gc来回收,而c语言需要人为的开辟内存空间和释放内存空间,因此内存能够得到充分的利用,但java的不同,因此gc的速度跟不上cpu的速度。为此java中提供了对字符串操作的类StringBuilder。String中对字符串值的改变需要重新开辟内存空间,后者是在原来的基础上对字符串进行操作。下面将对StrinBuilder中对字符串操作的方法做出介绍具体的代码实现如下:
package Day01;
/**
* StringBuiler提供了用于修改字符串内容的相关的方法
* 其内部的维护是一个可变的字符数组,当数组满了之后会自动的扩容,所以修改的都是在当前对象的
* 内部完成
* 当频繁修改字符串内容时应该使用当前类来完成
* @author 123
*
*/
public class StringBuilderDemo1 {
public static void main(String[] args) {
String str="努力学习java";
/*
* 为了提高字符串的拼接的效率,应该将
* 将String转化为StringBuilder
* 可以使用有参的构造方法
* StringBuider也有无参的构造方法,默认
* 表示空字符串
*/
StringBuilder builder=new StringBuilder(str);
/*
* 从StringBuilder转化为String
* 使用StringBuilder的toString方法即可
*/
str=builder.toString();
/*
* StringBuilder append(String str)
* 向字符串末尾指定的内容。
* 有若干重载方法,参数的类型不同,这些重载方法允许追
* 加其他的内容(先转化为字符串在追加)
*/
builder.append(",为了找个好工作");
System.out.println(builder.toString());
/*
* StringBuilder replace(int start,inr end,String Str)
* 将指定范围之内的字符串替换为指定的字符串
* 努力学习java,就是为了改变世界!
*/
builder.replace(9, 16, "就是为了改变世界!");
System.out.println(builder.toString());
/*
* StringBuilder delete(int start,int end)
* 将当前字符串的指定范围之内的内容删除
*/
builder.delete(0, 8);
System.out.println(builder.toString());
/*StringBuilder insert(int index,String str)
* 将给定的字符串插入到指定的位置,原位置以及后续字符串顺
* 序向后移动。
*
* 改革,就是为了改变世界!
*/
builder.insert(0, "活着");
System.out.println(builder.toString());
/*
* StringBuilder reverse();
* 翻转字符串
*/
builder.reverse();
System.out.println(builder.toString());
}
}
由于时间比较仓促,关于StringBuilder的方法不做过多的介绍,但是程序中有关于代码以及方法的注释。