黑马程序员_String

来源:互联网 发布:马云 阿里云 演讲 编辑:程序博客网 时间:2024/05/16 08:57

 ------- android培训、java培训、期待与您交流! ----------

 

public final class String
expends Object

String类代表字符串,因为被final修饰,所以不可以被继承
字符串是常量;它们的值在创建之后就不能更改。字符串缓冲区支持可变的字符串
因为String类是不可变的,所以可以共享


练习题
String s1="abc";
String s2=new String("abc");
System.out.println(s1==s2);//判断语句,si==s2吗,指内存地址址
System.out.println(s1.equals(s2));//equals用于比较字符串内容是否一样
输出结果为:false  true


获取:
int length();//返回此字符串的长度。
char charAt(int index);//返回指定索引处的 char 值。
int indexof(int index);//返回指定字符在此字符串中第一次出现处的索引
int indexof(int index,int fromIndex);//返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexof(String str);//返回指定子字符串在此字符串中第一次出现处的索引。
int indexof(String str,String fromIndex);
int lastIndexof(int ch);
示例:
class Same
{
 public static void method()
 {
  String str = "acgdewtsgr";
  sop(str.length());
  sop(str.charAt(4));
  sop(str.indexOf('c'));
  sop(str.indexOf('c',3));
  sop(str.indexOf("gd"));
  sop(str.indexOf("gd",3));
  sop(str.lastIndexOf('w'));
  sop(str.lastIndexOf("cg"));
 }
 
 public static void main(String[] args)
 {
  method();  
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

 

判断
boolean contains(str);//当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean isEmpty();//当且仅当 length() 为 0 时返回 true。
boolean startsWith(str);//测试此字符串是否以指定的前缀开始。
boolean endsWith(str);//测试此字符串是否以指定的后缀结束
boolean equals();//将此字符串与指定的对象比较。
boolean equalsIgnoreCase();//忽略大小写
示例
String str = "ArrayDemo.java";
  sop(str.startsWith("Array"));
  sop(str.endsWith(".java"));
  sop(str.contains("Demo"));


转换
将字符数组转换成字符串
构造方法:String(char[]); 
    String(char[],offset,count);将字符数组的一部分转换成字符串
静态方法:static String copyValueOf(char[]);
    static String copyValueOf(char[] date,int offset,int count);
    static String ValueOf(char[]);
将字符串转换成字符数组
char[] toCharArray();
将字节数组转换成字符串
String(byte[]); 
String(byte[],offset,count);
将字符串转换成字节数组
byet[] getBytes();
将基本数据类型转换成字符串
static String ValueOf(int);
static String ValueOf(double);
示例:
class Same
{
 public static void method()
 {
  char[] arr={'a','b','c','d','e','f','g'};
  String s=new String(arr,1,3);
  sop("s="+s);
  String s1="xcvsgfdhh";
  char[] chs=s1.toCharArray();
  for (int x =0;x<chs.length ;x++ )
  {
   sop("ch="+chs[x]);
  }
  
 }
 
 public static void main(String[] args)
 {
  method();  
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}


替换
String replace(oldchar,newchar);

示例:
class Same
{
 public static void method()
 {
  String s ="hello java";
  String s1=s.replace('a','n');
  String s2=s.replace("java","hello");
  sop(s);
  sop(s1);
  sop(s2);
 }
 
 public static void main(String[] args)
 {
  method();  
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

 

切割
String[] split(regex);

示例:
class Same
{
 public static void method()
 {
  String s ="zhangsan,lisi,wangwu";
  String[] arr=s.split(",");
  for (int x=0;x<arr.length ;x++ )
  {
   sop(arr[x]);
  }
 }
 
 public static void main(String[] args)
 {
  method();  
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

 


子串:获取子串中的一部分
String substring(begin);//从指定位置开始到结尾
String substring(begin,end);//包含头不包含尾

示例:
class Same
{
 public static void method()
 {
  String s ="zhangsan,lisi,wangwu";
  sop(s.substring(2));
  sop(s.substring(2,4));  
 }
 
 public static void main(String[] args)
 {
  method();  
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}


将字符串转成大小写
String toUpperCase();
String toLowerCase();
将字符串两端的多个空格去除
String trim();
将两个字符串进行自然顺序的比较
int compareTo(string);  负数  0  正数

示例:
class Same
{
 public static void method()
 {
  String s ="   zhangsan,lisi,wangwu     ";
  sop(s.toUpperCase());
  sop(s.toLowerCase());
  sop(s.trim());
  String s1="abc";
  String s2="acc";
  sop(s1.compareTo(s2));

 }
 
 public static void main(String[] args)
 {
  method();  
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

 

练习题
模拟trim原理
class  Demo
{
 public static void main(String[] args)
 {
  String s="       sagjlaklsfj       ";
  sop(s);
  sop(myTrim(s));
 }
 public static String myTrim(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+1);
  
 }

 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}


将一个字符串进行反转,将一个字符串中的一部分进行反转
class  Demo1
{
 public static void main(String[] args)
 {
  String s="abcdefg";
  sop(fan(s));
  
 }
 public static String fan(String str)
 {
  char[] chs=str.toCharArray();//将字符串转换成数组
  reverse(chs);
  return new String(chs);
 }
 private static void reverse(char[] arr)//反转数组
  {
   for (int start=0,end=arr.length-1;start<end ;start++,end-- )
   {
    swap(arr,start,end);
   }
  }
 private static void swap(char[] arr,int x,int y)
  {
   char temp=arr[x];
   arr[x]=arr[y];
   arr[y]=temp;
  }
  

 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

 


class  Demo2
{
 public static void main(String[] args)
 {
  String s="abcdefg";
  sop(fan(s,5,6));
  
 }
 public static String fan(String str,int x,int y)
 {
  char[] chs=str.toCharArray();//将字符串转换成数组
  reverse(chs,x,y);
  return new String(chs);
 }
 private static void reverse(char[] arr,int x,int y)//反转数组
  {
   for (int start=x,end=y;start<end ;start++,end-- )
   {
    swap(arr,x,y);
   }
  }
 private static void swap(char[] arr,int x,int y)
  {
   char temp=arr[x];
   arr[x]=arr[y];
   arr[y]=temp;
  }
  

 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

 

获取一个字符串在另一个字符串中出现的次数
class  Demo
{
 public static void main(String[] args)
 {
  String s="abkkcdkkekkfkkg";
  sop(getSubCount(s,"kk"));
  
 }
 public static int getSubCount(String str,String key)
 {
  int count=0;
  int index=0;
  while ((index=str.indexOf(key))!=-1)
  {
   sop(index);
   index=index+key.length();
   //sop("str="+str);(两种方法,一种以index的变化让count自增,一种以子集的变化让count自增)
   //str=str.substring(index+key.length());

   count++;
  }
  return count;
 
 }
  

 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

 

 

 

获取两个字符串中最大的相同字符串
class  Demo
{
 public static void main(String[] args)
 {
  String a1="absdfdsfhellokg";
  String a2="abfsdhello";
  sop(getMaxSubstring(a1,a2));
  
 }
 
 public static String getMaxSubstring(String s1,String s2)
 {
  String max=" ",min=" ";
  max=(s1.length()>s2.length())?s1:s2;
  min=(max==s1)?s2:s1;
  
  sop(max+"......."+min);

  for (int x=0;x<min.length() ;x++ )
  {
   for (int y=0,z=min.length()-x;z!=min.length()+1 ;y++,z++ )
   {
    String temp = min.substring(y,z);
    if (max.contains(temp))
    return temp;
   }
  }
  return "";
 }
  

 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}


StringBuffer
是一个容器,可对字符串内容进行增删,长度可变
示例:
StringBuffer sb=new StringBuffer();
sb.append("sbc").append(true).append(34);
sb.insert(2,"qq");在索引处插入字符
sb.delete(1,4);删除索引区域字符,包头不包尾
sb.delete(0,sb.length());清空
sb.replace(1,3,"java");置换索引区域字符,包头不包尾
sb.setCharAt(3,'j');将给定索引处的字符设置为 ch
sb.reverse();将此字符序列用其反转形式取代。
sb.indexOf("t");获取第一次出现的指定字符串在该字符串中的索引位置。
sb.lastIndexOf("t")从最后开始获取
sb.length();
sb.charAt(2);获得在些角标位的char值
sb.substring(2,5);获得从开始到结尾的子串,包头不包尾
sb.getChars(1,4,chs,2);获取一个数组。原开始值,原结束值,chs数组,目标位置

 

 

JDK1.5版本以后出现了StringBuilder
StringBuilder线程不同步
StringBuffer 线程不同步

建议用StringBuilder

升级三个要素:
提高效率
简化书写
提高安全性

 

 

基本数据类型对象包装类

byet       Byte
short      Short
int        Integer
long       Long
boolean    Boolean
float      Float
double     Double
char       Character
基本数据类型对象包装类最常见作用就是用于基本数据类型和字符串类型之间进行转换
Integer.MAX_VALUE   int数据的最大值

基本数据类型转字符串
基本数据类型+""
基本数据类型.toString(基本数据类型值)
例:Integer.toString(34)   "34"


字符串转成基本数据类型

int num=Integer.parseInt("123");//必须传入数字类型的字符串
sop(num+4);
得127

double d= Double.parseDouble("12.23");

十进制转二进制,16进制
sop(Integer.toBinaryString(-6));
sop(Integer.toHexSring(60));

二进制,16进制转十进制

sop(Integer.parseInt("3c",16));
sop(Integer.parseInt("110",2));

练习:
Integer x=new Integer("123");
Integer y=new Integer(123);
sop(x==y);           两个对象,所以false
sop(x.equals(y));    两个对象,内容相同,所以true

JDK1.5版本以后出现的新特性
Integer x=new Integer(4);
可以简写为 Integer x =4;


Integer m=128;
Integer n=128;
sop(m==n);  两个对象,所以false

Integer a=127;
Integer b=127;
sop(a==b);  数值在byte范围内,对于新特性,如果该数值已经存在,则不会开辟新的空间,所以指向的是同一个对象,true

 

 

 

 

 

 

 

 

 

原创粉丝点击