String类特点:字符串对象一旦被创建就不会被改变
public class StringDemo {
public static void main(String[] args) {
//stringDemo1();
stringDemo2();
}
public static void stringDemo2() {
// TODO Auto-generated method stub
String s1="abc"; //在常量池中创建一个字符串对象
String s2=new String("abc");//创建另个字符串对象,一个new对象在堆内存中
System.out.println("s1="+s1);
System.out.println("s2="+s2);
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
//String类中的equals方法复写Object类中的方法,建立了自己类中判断字符串是否相等的依据
//其实就是比较字符串内容
}
/**
* 演示字符串的第一种创建方式,并明确字符串常量池的特点
* 池中没有就建立,有就直接用
*/
private static void stringDemo1() {
String s="abc";//"abc"存储在字符串常量池中
String b="abc";
System.out.println(b==s);
}
}
构造方法:
public class StringConstructorDemo {
public static void main(String[] args) {
stringConstructorDemo();
}
private static void stringConstructorDemo() {
String s=new String();//等效于String s=“”,不等效于String s=null;
char[] arr= {'d','h','f','e'};
String v=new String(arr,1,2);
System.out.println("v="+v);
}
}
Test1:
public class StringSort {
public static void main(String[] args) {
String[] arr= {"abc","dnw","hak","krfk","lkjdk","ehw"};
printSort(arr);
sortarr(arr);
printSort(arr);
}
private static void sortarr(String[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for(int j=i+1;j<arr.length;j++){
if(arr[i].compareTo(arr[j])>0)
swap(arr,i,j);
}
}
}
private static void swap(String[] arr, int i, int j) {
String temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void printSort(String[] arr) {
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+",");
System.out.println();
}
}
Test2:求在指定字符串中子串出现的次数
public class StringTest_2 {
public static void main(String[] args) {
String str="dfeikjhdbejakjhudneskjhpsnkjheqbsgkjh";
String key="kjh";
//int count=indexcounts_1(str,key);
int count=indexcounts_2(str,key);
System.out.println("count ="+count);
}
//方法一
public static int indexcounts_2(String str, String key) {
int count=0;
int index=0;
while((index=str.indexOf(key,index))!=-1) {
index=index+key.length();
count++;
}
return count;
}
//方法二
public static int indexcounts_1(String str, String key) {
int count=0;
int index=0;
while((index=str.indexOf(key))!=-1) {
str=str.substring(index+key.length());
count++;
}
return count;
}
}
Test3:
public class StringTest_3 {
public static void main(String[] args) {
String s1="mciegajyabcd;ewdkbvdsdyjvxd";
String s2="abcd";
String s=getMaxstring(s1,s2);
System.out.println(s);
}
public static String getMaxstring(String s1, String s2) {
String max=null;
String min=null;
String sub=null;
max=(s1.length()>s2.length())?s1:s2;
min=(max.contains(s1))?s2:s1;
for(int x=0;x<min.length();x++)
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
{
sub=min.substring(y, z);
if(max.contains(sub))
return sub;
}
return null;
}
}
Test4:
public class StringTest_4 {
public static void main(String[] args) {
String str=" a cv f ";
System.out.println("-"+str+"-");
String ts=getTrim(str);
System.out.println("-"+ts+"-");
}
public static String getTrim(String str) {
int start=0,end=str.length()-1;
while(start<end&&str.charAt(start)==' ')
{
start++;
}
while(start<end&&str.charAt(end)==' ')
{
end--;
}
return str.substring(start, end);
}
}
StringBuffer:
* StringBuffer:就是字符串缓冲区。
* 用于存储数据的容器。
* 特点:
* 1,长度的可变的。
* 2,可以存储不同类型数据。
* 3,最终要转成字符串进行使用。
* 4,可以对字符串进行修改。
*
* 既然是一个容器对象。应该具备什么功能呢?
* 1,添加:
* StringBuffer append(data);
* StringBuffer insert(index,data);
* 2,删除:
* StringBuffer delete(start,end):包含头,不包含尾。
* StringBuffer deleteCharAt(int index):删除指定位置的元素
* 3,查找:
* char charAt(index);
* int indexOf(string);
* int lastIndexOf(string);
* 4,修改:
* StringBuffer replace(start,end,string);
* void setCharAt(index,char);
* 增删改查 C(create)U(update)R(read)D(delete)
public class StringBufferDemo {
public static void main(String[] args) {
bufferMethodDemo_2();
}
private static void bufferMethodDemo_2() {
StringBuffer sb = new StringBuffer("abce");
// sb.delete(1, 3);//ae
//清空缓冲区。
// sb.delete(0,sb.length());
// sb = new StringBuffer();
// sb.replace(1, 3, "nba");
// sb.setCharAt(2, 'q');
// sb.setLength(10);
// System.out.println("sb:"+sb);
// System.out.println("len:"+sb.length());
System.out.println(sb.reverse());
}
private static void bufferMethodDemo_1() {
StringBuffer sb = new StringBuffer("abce");
// sb.append("xixi");
sb.insert(2, "qq");
System.out.println(sb.toString());
}
public static void bufferMethodDemo(){
//创建缓冲区对象。
StringBuffer sb = new StringBuffer();
sb.append(4).append(false);//.append("haha");
sb.insert(1, "haha");
// sb.append(true);
System.out.println(sb);
}
}
StringBuilder:
* jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder
*
* 不同的是:
* StringBuffer是线程同步的。通常用于多线程。
* StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。
*
* jdk升级:
* 1,简化书写。
* 2,提高效率。
* 3,增加安全性。
public class StringBuilderDemo {
public static void main(String[] args) {
}
}
class StringBuffer jdk1.0
{
object lock;
public StirngBuffer append(int x)
{
synchronized(lock)
{
}
}
public synchronized StringBuffer delete(int start,int end)
{
synchronized(lock)
{
}
}
}