鸟哥Java学习之String类 and StringBuffer类-常用对象API

来源:互联网 发布:软件前端和后端 编辑:程序博客网 时间:2024/06/12 00:17
1.java.lang包是Java核心类,会自动导入程序中,String类就是在其中。
    创建:两种方式,一个在常量池中,一个在堆内存中(new)。String对象一旦创建其内容就不会改变。

2.String类方法:常见功能
获取:
    int indexOf(int ch) 返回指定字符第一次出现的位置索引
    int indexOf(int ch,int fromIndex)
    int indexOf(string str) 获取字符串第一次出现的位置
    获取子串 substring
转换:
    String[] split(String regex) 字符串切割,参数是规则,涉及到正则表达式。
    char[] toCharArray() 字符串转成字符数组
    byte[] getBytes() 字符串转成字节数组
    String toUpperCase() 字符串字母转成大小写
    String replace(char oldch,char newch)字符串内容进行替换
    String replace(String s1,String s2)
    trim() 去除字符串两端空格,实际开发中有用,用户在输入信息后习惯输入空            
    String concat(String)字符串连接  同+
判断:
    字符串内容是否相等 boolean equalsIgnoreCase()忽略字母大小写
    字符串中是否包含某一字符串boolean contains(CharSequence s)
    字符串是否以指定字符串开头,是否以指定字符串结尾boolean startsWith(String prefix)
比较:
    int compareTo(String anotherString) 按照字符ASCII码顺序

3.StringBuffer:字符串缓冲区, 容器对象。特点:长度可变,可以存储不同类型数据,最终转成字符串进行处理,可以对字符串进行修改。
    方法:
    添加 append(data)
    插入 insert(index,data)
    删除 delete(start,end)包含头不包含尾,注意清空缓冲区
都是返回缓冲区
   
    修改 replace,void setCharAt
    查找 根据内容查角标 indexOf 和根据角标查内容 charAt

4.StringBuilder:此类提供一个与StringBuffer兼容的 API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。

package string.p1.demo;
 
/*
* 给定一个字符串数组,按照字典顺序从小到大排序
* {"nba","abc","cba","zz","qq","haha"}
* 思路:
* 1.数组排序,选择或冒泡
* 2.for嵌套,字符串比较compareTo(),换位
*
*/
public class test1 {
 
public static void main(String[] args) {
String[] arr = {"nba","abc","cba","zz","qq","haha"};
printArray(arr);
sortArray(arr);
printArray(arr);
}
 
public static void sortArray(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);
}
}
 
public static void swap(String[] string,int i,int j) {
String temp=string[i];
string[i]=string[j];
string[j]=temp;
}
 
public static void printArray(String[] arr) {
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1)
System.out.print(arr[i]+',');
else
System.out.println(arr[i]+']');
}
}
 
}
package string.p1.demo;
/*
* 子串的在整串中出现的次数getkeystringcount(str,key)
* 思路:
* 1.子串是否存在,不存在 -1,若存在,获取子串第一次出现的位置 int indexOf(string str)
* 2.取剩余子串,剩余子串 的初始位置即是出现的位置+剩余子串长度
* 3.以此类推,即循环1,2。并对每次找到用计数器count
*
* 改进:getkeystringcount_1(str,key)
* int indexOf(string str,index)从某个位置开始找
*/
public class test2 {
 
public static void main(String[] args) {
String str = "nbajhioheoihnbajnba";
String key = "nba";
int count = getkeystringcount_1(str,key);
System.out.println("count="+count);
}
 
public static int getkeystringcount_1(String str, String key) {
int count = 0;
int index = 0;
while((index = str.indexOf(key,index)) != -1){
//str = str.substring(index + key.length());
index = index + key.length();
count++;
}
return count;
}
 
}
package string.p1.demo;
/*
* 两个字符串中最大相同子串
* 思路:
* 1.选择更短的字符串,先一整串比,看长串是否包含,若包含,则返回,若不包含,则2
* 2.选取短串长度-1的子串再看是否包含
* 3.循环直至找出,外循环一共需要短串长度str2.length()趟,内循环则是对应子串选取
*/
public class test3 {
public static void main(String[] args) {
String str1 = "ahirewonproieop";
String str2 = "ngdlsirewo";
String str = getMaxSubString(str1,str2);
System.out.println(str);
}
/**
* 获取最大子串
* @param str1
* @param str2
* @return String
*/
public static String getMaxSubString(String str1, String str2) {
for(int i = 0;i<str2.length();i++){
for(int x = 0,y=str2.length()-i;y!=str2.length()+1;x++,y++){
String sub = str2.substring(x,y);
if(str1.contains(sub)) return sub;
}
}
return null;
}
}


    
    
    
0 0
原创粉丝点击