黑马程序员——String
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
概述:字符串是一个特殊的对象,字符串一但初始化就不可以被改变。
String s1=”abc”;与String s2=new String(“abc”)有什么区别?
String s1=”abc”中s1是一个类类型的变量,“abc”是一个对象。
S1在内存中有一个对象,s2在内存中有两个对象
String类适用于描述字符串事物。它提供了多个方法对字符串进行操作。
常见的操作有哪些?
一、获取
1、字符串中包含的字符数,也就是字符串的长度
int length():获取长度
2、根据位置获取位置上某个字符
char charAt(int index):
3根据字符获取该字符在字符串中的位置
int indexOf(int ch):返回字符在字符串第一次出现的位置
int indexOf(int ch,int fromIndex):从指定位置开始,获取字符在字符串第一次出现的位置
int indexOf(String str):返回字符串在字符串第一次出现的位置
int indexOf(String str,int fromIndex):从指定位置开始,获取字符串在字符串第一次出现的位
二、判断
1、字符串中是否包含某个字串
boolean contains(str)
2、字符串是否有内容
boolean isEmpty()
3、字符串是否以指定内容来头
boolean startWith(str)
4、字符串是否以指定内容结尾
boolean endWith(str)
5、判断内容是否相同
boolean equals(str)
6、判断内容是否相同并忽略大小下
boolean equalsIgnorCase(str)
三、转换
1、将字符数组转为字符串
构造函数:
String(char[])
String(char[],offset,count):将字符数组的一部分转成字符串
静态方法:
static String copyValueOf(char[])
static String copyValueOf(char[],offset,count)
static String ValueOf(char[])
2、将字符串转为字符数组
char[] toCharArray()
3、将基本数据类型转成字符串
String valueOf(int)
String valueOf(double)
4、将字符串转为字节数组
byte[] getBytes()
5、将字节数组转成字符串
String(byte[])
String(byte[],offset,count)将字节数组中的一部分转成字符串
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
public class t9{
public static void main(String[] args){
method_get();
method_is();
method_trans();
}
public static void sop(Object obj){
System.out.println(obj);
}
public static void method_get(){
String st="asdfghjfdsaf";
//长度
sop(st.length());
//根据位置获取位置上某个字符
sop(st.charAt(4));
//根据字符找位置
sop(st.indexOf("s"));
//从4位置开始找d,如果没有返回-1
sop(st.indexOf("d",4));
//从后面数起第四位开始找第一个出现的d
sop(st.lastIndexOf("d",4));
}
public static void method_is(){
String str="ArrayDamo.java";
//判断开头
sop(str.startsWith("Array"));
//判断结尾
sop(str.endsWith(".java"));
//判断是否包含
sop(str.contains("Damo"));
}
public static void method_trans(){
char[] arr={'a','b','h','j','y','g','f','d'};
String st=new String(arr,2,3);
String s1="FSDGFDHFTUJF";
char[] ch=s1.toCharArray();
}
}
StringBuffer
概述:字符串的组成原理就是通过该类实现的。StringBuffer可以对字符串的内容进行增删。StringBuffer是一个容器,很多方法与String相同String相同。StringBuffer是可变长度的。
一、存储
append();将指定数据作为参数添加才已有数据的结尾处。
insert(intex,数据);可以将数据插入到制定位置。
二、删除
delete(start,end):删除缓冲区中的数据,包含start,不包含end。
deleteCharAt(index):删除指定位置的字符。
三、获取
charAt(int index)
indexOf(String str)
lastIndexOf(String str)
lenth()
substring(start,end)
四、修改
replace(start,end,String str)
setCharAt(index,ch)
五、反转
reverse();
class StringBufferD{
public static void main(String[] args){
}
public static void del(){
StingBuffer sb=new StringBuffer(“asdfsg”);
//sb.delete(1,3);
sb.deleteCharAt(2);
}
public static void add(){
StingBuffer sb=new StringBuffer();
StringBuffer sb1=sb.append(34);//
Sop(sb.toString());
Sop(sb1.toString());
}
public static void add(){
StingBuffer sb=new StringBuffer(“asdfsg”);
sb.replacce(1,3,”java”);
sb.setCharAt(2,‘k’);
}
public static void sop(String str){
System.out.println(str);
}
}
JDK1.5版本之后出现了StringBuilder,
StringBuffer是线程同步的。
StringBuilder是线程不同步的。
以后开发建议使用StringBuilder
升级三个因素:
1.提高效率
2.简化书写
3.提高安全性
一些字符串练习小程序
/*
* 模拟一个trim方法,去除字符串两端的空格。
* 思路:定义两个角标变量start,end,从两角标位置开始判断其对应位置的字符是否为空格。
* 如果是,就继续向下判断,如果不是就,返回该位置
* 截取所获的两个位置str.substring(start,end);
*
*
* */
public class n1 {
public static void main(String[] args){
String s=" asdf ";
s=mytrim(s);
show(s);
}
public static void show(String s){
System.out.println(s);
}
public static String mytrim(String s){
int start=0,end=s.length()-1;
while(s.charAt(start)==' ' && start<=end){
start++;
}
while(s.charAt(end)==' ' && start<=end){
end--;
}
s=s.substring(start,end+1);
return s;
}
}
/*将一个字符串进行反转,将字符串中指定部位进行反转,"abcdefg";"abfedcg"
* 思路:将字符串转成数组进行操作。
* 将数组指定位置进行调位操作。
* 将反转后的字符重新变为字符串
*/
public class n2 {
public static void main(String[] args){
String s="abcdefg";
show(s);
//show(revers(s));
show(revers(s,1,3));//不包含尾
}
public static void show(String str){
System.out.println(str);
}
public static String revers(String str,int x,int y){
char[] ch=str.toCharArray();
fun(ch,x,y);
return new String(ch);
}
public static void fun(char[] ch,int x,int y){
for(int start=x,end=y-1;x<y;x++,y--){
char temp=ch[start];
ch[start]=ch[end];
ch[end]=temp;
}
}
}
/*
获取两个字符串中最大的子串
"abcwerthelloyuiodef"
"cvhelloobm"
* */
public class n4 {
public static void main(String[] args){
String str="abcwerthelloyuiodef";
String key= "cvhelloobm";
show(sub(str,key));
}
public static void show(String str){
System.out.println(str);
}
public static String sub(String str,String key){
for(int x=0;x<key.length()-1;x++){
for(int y=0,z=key.length()-x;z!=key.length()+1 && y<z;y++,z++){
String s=key.substring(y,z);
if(str.contains(s)){
return s;
}
}
}
return "";
}
}