黑马程序员_JavaSE基础15 之 常用对象API String类 SringBuffer类

时间:2022-08-27 08:36:08
----------------------      android培训、java培训、期待与您交流!   ---------------------
JavaSE_15  笔记 
                            Java语言基础之 常用对象API String类 SringBuffer类
 
1、 Java提供的面向对象的对象——String类
① 字符串是一个特殊的对象。
② 字符串一旦初始化就不可以被改变。
③ String str=”abc”;  和 String str=new String(“abc”); 创建了两个对象。
④ 
String s=”abc”; String s1=”abc”; //其实s1指向了s指向,即若无则创建,若有直接拿过来用。”abc”存储在字符串常量池中。
s==s1 ; //注意 ,“==”比较的是地址值。
String s=”abc”; // 是在字符串常量池中创建了abc字符串。并把地址赋给s引用型变量。它产生了一个对象。
String s1=new String(“abc”);  //是在堆内存中创建了string对象,并在构造时接受了字符串对象,并无在字符串常量池操作。它产生了两个对象。
 s==s1// false ;
S.equals(s1); //true ,String类将此方法进行了覆写,它比较的是内容。原来的Object类中的此方法也是比较地址值的。
 
2、String类的构造方法
 
3、String类的操作之 获取
① 获取字符串的长度字符个数 。 int Length() ; 
② 根据位置获取字符串。  char  charAt(int index);
③ 根据字符取 在字符串中第一次出现的位置。  int indexOf(int ch);
④ 根据字符取 在字符串指定位置开始第一次出现的位置 
int indexOf(int ch ,int fromIdex ) ;
int indexOf(int ch,int fromIndex);
int indexOf(String str);
int indexOf(String str,int fromIndex);
⑤ 根据字符串获取 在字符串中第一次出现的位置
 Int lastIndexOf(int ch);
int lastIndexOf(int ch,int fromIndex);
int lastIndexOf(String str);
int lastIndexOf(String str,int fromIndex);
⑥ 获取字符串中的 子串
  String substring(int bs,int es); // 获取的是 bs开始到 es-1处的字符。
 
4、String类的操作之 转换
  ① 将字符串变为 字符串数组 (字符串切割)
String[]  split(String regex) ; 
  ② 将字符串变为 字符数组
char[] toCharArray() ; 
  ③ 将字符串变为 字节数组
     byte[] getBytes();
  ④ 将字符串进行大小写的转换
  ⑤ 将字符串中的内容进行替换
     String replace( char oldch, char newch ); 
   ⑥ 将字符串两端的空格去除 string trim();
   ⑦ 将指定数据变为字符串
       String.valueOf ( 4)+1; //41 
 
5、String类的操作之 判断
① 两个字符内容是否相同
boolean equals (Object obj);
Boolean equalsIgnoreCase( string str);
② 是否包含制定字符串
  boolean  Contains(string str); 
③ 是否以制定字符串开头和结尾
  boolean startsWith( string begstr);  boolean endswith(string enStr);
 
6、 String类的操作之 比较
① 比较两个字符串 大小,按照的是ascII 表字典的顺序进行比较 
  int compareTo( String anotherStr ) //
 
 
7、事例:字符串 排序操作
//字符串数组排序{"nab","nba","abc"};
public class StringDemo {
public static void main(String[] args){
 
String[] arr={"nab","nba","abc"};
printArrary(arr);
sortArray(arr);
System.out.println("-------------");
printArrary(arr);
 
}
 
//选择排序
private static void sortArray(String[] arr) {
// TODO Auto-generated method stub
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 str=arr[i];
arr[i]=arr[j];
arr[j]=str;
 
}
 
private static void printArrary(String[] arr) {
// TODO Auto-generated method stub
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
 
  
 
8、事例:判断子串在整串中出现的次数
 /**
 * 
 * @author Wang
 *判断子串在整串中出现的次数
 *思路:
 *1、记录子串出现的位置,若存在则获取其位置,用indexof();
 *2、若找到则继续从该位置往后找,直至-1;
 */
public class StringDemo {
public static void main(String[] args){
//子串的次数
String str="nbaeeewoijanbaoiweonba";
String key="nba";
int count=getKeyStringCount(str,key);
System.out.println("count=="+count);
 
}
//获取子串个数方式一:改变原有字符串,在改变后的字符串进行查找
public static int getKeyStringCount(String str, String key) {
int count=0;
int index=0;
while((index=str.indexOf(key))!=-1){ //循环判断是否含有子串key
str=str.substring(index+key.length());  //重新获得字符串,注意位置
count++;
}
return count;
}
//获取子串个数方式二:改变查找字符串的起始位置;这种方式最好,因为不用产生过多的字符串常量
public static int getKeyStringCount2(String str,String key){
int count=0;
int index=0;
while((index=str.indexOf(key, index))!=-1){
index=index+key.length();
count++;
}
return index;
}
 
 
 
}
 
9、事例:获取两个字符串中最大相同的子串
/**
 * 
 * @author Wang
 *获取两个字符串中最大相同的子串
 *思路:
 *1、将子串进行长度递减,去长串中查看是否存在,若存在则返回
 *
 */
public class StringDemo {
public static void main(String[] args){
//子串的次数
String str1="nbaweeewoijanbaoiweonba";
String str2="m";
String s=getMaxSubString(str1,str2);
System.out.println(s);
 
}
 
private static String getMaxSubString(String str1, String str2) {
// TODO Auto-generated method stub
for(int i=0;i<str2.length();i++){  //第一次循环遍历总的截取的数目 比如要截取子串中 3个长度
for(int j=0,z=str2.length()-i-1;z!=str2.length();j++,z++){  //第二次循环 截取当前数目要遍历的个数 比如3个长度在子串中有几个
String sub=str2.substring(j,z);
if(str1.contains(sub)){
return sub;
}
}
}
return null;
}
 
 
 
 
 
}
 
10、StringBuffer类 :就是字符串缓冲区,用于存储数据的容器。
特点:长度是可变的;可以存储不同类型的数据;最终要转成字符串使用。可以对字符串进行插入修改;
11、StringBuffer类的功能 ( CURD )
① 增加:
StringBuffer append( data );  StringBuffer insert( index , data );
② 删除:
StringByffer delete( start,end ) // 不包含尾;
StringBuffer deleteCharAt( int index ); // 删除指定位置元素
③ 修改:
 StringBuffer replace( start,end ,string );
Void setCharAt( index , char );
④ 查找:
Char charAt(index);
Int indexOf(string);
Int lastIndexOf(string);
 
 
12、StringBuilder 类: 不保证线程同步,即不保证安全,而StringBuffer保证线程同步,保证安全。
所以:stringbuffer多用于多线程;stringbuilder多用于单线程。效率高;
13、JDK升级
简化书写;提高效率;增加安全性;
 
  
 
 
                                                                   2012/9/10     By  Mary_k