demo1
public class StringDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abcd";
str = "haha";//内存中多了一个haha对象,abcd对象没有变str从
//指向abcd到指向haha
System.out.println("str="+str);
//-------------
System.out.println("---------多个引用指向同一个字符串--------");
System.out.println("itcast");
String s1 = "itcast";
String s2 = "itcast";
System.out.println(s1==s2);
System.out.println("---------两个内容相同,创建方式不同的字符串--------");
String s3 = "abc";
String s4 = new String("abc");
//s3和s4有什么不同
/*
* s3创建,在内存中只有一个对象 常量池
* s4创建,在内存中有两个对象 堆中有一个 常量池中有一个
*
*/
System.out.println(s3==s4);//flase
System.out.println(s3.equals(s4));//true
//String 复写了equals方法,建立字符串相等的依据是按照内容来判断的,
//Object的equals是比较对象的地址
System.out.println("-------");
String s5="abcdefgaijk";
System.out.println("s5.length()="+s5.length());
//--------a字母出现的位置--------
int index = s5.indexOf('a');//获取a字符第一次出现的位置
System.out.println("a出现的位置"+index);
//--------a字母第二次出现的位置--------
int index2 = s5.indexOf('a',index+1);
System.out.println("a第二次出现的位置"+index2);
//----------获取部分字符串------------
String s = s5.substring(0, 3);//包含头不包含尾
System.out.println("s="+s);
}
}
demo2
public class StringDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "lisi,wagnwu,zhaoliu";
String s = str.replace("Demo", "Test");//没有被替换的时候返回原值
System.out.println("s="+s);
String[] names = str.split(",");//以“,”分割点产生数组的元素
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
int result = "cd".compareTo("abcd");
//只要想让对象具备比较大小的功能只需要实现CompareTo接口
System.out.println("result="+result);
}
}
demo3
import java.util.Arrays;
public class StringDemo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 案例一:字符串数组
* ["abc","nba","cctv","itcast"]
* 要求从小到大排序
* */
String[] str={"abc","nba","cctv","itcast"};
System.out.println("交换前");
print(str);
sortString(str);
//Arrays.sort(str);//这样一句话就可以了
System.out.println("交换后");
print(str);
/*
* 案例2:
* "sdafasdgadjhfskajdfhkjsdhfkjalsdhfklas"//sd出现的次数
* 思路:
* 1,无非是在一个字符串中查找另一个字符串。indexOf
* 2,查找到第一次出现的指定字符串后如何查找第二个呢?
* 3,无需再从头开始,只要从第一次出现的位置开始+key的长度之后开始找第二个
* 4,返回-1是查找结束
* */
String str2 ="sdafasdgadjhfskajdfhkjsdhfkjalsdhfklas" ;
String key="sd";
int count = getKeyCount(str2,key);
System.out.println("count="+count);
/*
* 案例三:
* "itcast_sh"按照长度输出
* */
String str3="itcast_sh";
System.out.println("str3.length="+str3.length());
System.out.println("按长度输出");
printStringByLength(str3);
}
/**
* 按长度输出
* @param str
*/
private static void printStringByLength(String str) {
// TODO Auto-generated method stub
for (int i = 0; i < str.length(); i++) {
for(int start =0,end = str.length()-i;end<=str.length();start++,end++){
String temp=str.substring(start, end);
System.out.println(temp);
}
}
}
/**
* 获取key在str中出现的次数
* @param str
* @param key
* @return
*/
private static int getKeyCount(String str, String key) {
//1,定义变量。记录每一次找到的key的位置
int index = 0;
//2,定义变量,记录出现的次数。
int count=0;
//3,定义循环。只要索引值的位置不是-1,继续查找
while((index=str.indexOf(key, index))!=-1){
//每一次循环,就要明确下一次查找的其实位置
index=index+key.length();
count++;
}
return count;
}
/**
* 打印字符数组
* @param str
*/
private static void print(String[] str) {
// TODO Auto-generated method stub
for (int i = 0; i < str.length; i++) {
System.out.println("str="+str[i]);
}
}
/**
* 字符串数组排序
* 思路:
* 1,曾经玩过int数组排序
* 2,字符串排序同理
* 3,for嵌套循环。
* 4,循环中进行元素的大小比较,满足交换
* @param str
*/
private static void sortString(String[] str) {
// TODO Auto-generated method stub
for (int i = 0; i < str.length; i++) {
for(int j = i+1;j<str.length;j++){
if(str[i].compareTo(str[j])>0){
swap(str,i,j);
}
}
}
}
/**
* 交换数组中元素的值
* @param str
* @param i
* @param j
*/
private static void swap(String[] str, int i, int j) {
// TODO Auto-generated method stub
String s=str[i];
str[i]=str[j];
str[j]=s;
}
}