黑马程序员---String类

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

1、String类

       将字节数组或者字符数组转成字符串可以通过String类的构造函数完成

       方法:String(byte[] bytes) 将字节数组转换成一个字符串。

                String(char[] value, int offset, int count)  将一个字符数组转换成一个字符串。其中offset表示数组中开始的位置,count表示数量。

 

2、String类的特点

       字符串对象一旦被初始化就不会被改变。

       String s="abc";//创建一个字符串对象在常量池中。

       String s1=new String ("abc");//创建两个对象一个new 一个字符串对象在堆内存中。

       创建字符串时,先到常量池中寻找,没有就建立,如果有,直接使用。

 

3、String类的方法

       获取

       获取字符串中字符的个数(长度)  int   length();

       根据位置获取字符    char  charAt(int index);

       根据字符获取在字符串中的第一次出现的位  int  indexOf(int ch);【因为char类型可以转换成int(对应的是0---2^16), 依据ASCII,返回-1时,表示这个字符不存在,此方法也可以判断字符是否存在。】

       指定位置进行ch的查找第一次出现位置   int indexOf(int ch,int fromIndex);

       根据字符串获取在字符串中的第一次出现的位置  int indexOf(String str);

       指定位置进行ch的查找第一次出现位置  int indexOf(String str,int fromIndex)

       根据字符获取在字符串中的最后一次出现的位置  int lastIndexOf(int ch)

       指定位置进行ch的查找最后一次出现位置  int lastIndexOf(int ch,int fromIndex);

       根据字符串获取在字符串中的最后一次出现的位置  int latindexOf(String str);

       指定位置进行ch的查找最后一次出现位置  int lastindexOf(String str,int fromIndex)

        获取字符串中一部分字符串,也叫子串  String  subString(int beginIndex,int endIndex);【包含begin,但不包含end】

                                                                              String substring(int beginIndex);从beginIndex到最后

 

       转换

      将字符串变成字符串数组(字符串的切割)String []  split(String regex):【里面的条件是一个正则表达式】

      将字符串变成字符数组  char []   toCharArray();

      将字符串变成字节数组  byte [] getBytes();

      将字符串中的字母转成大小写   String toUpperCase();【大写】

                                                              String toLowerCase();【小写】

     将字符串中的内容进行替换         String replace(char oldch,char newch);

                                                              String replace(String s1,String s2);

      将字符串两端的空格去除            String trim();

      将字符串进行连接                        String concat(String str);

 

       判断

        两个字符串内容是否相同         boolean equals(Object obj);【复写Object的方法,所以传递的是Object对象】

                                                             boolean equalsIgnoreCase(String str);忽略大写比较字符串内容。

       字符串中是否包含指定字符串  boolean contains(String str);

       字符串是否以指定字符串开头   boolean startsWith(String str);

       字符串是否以指定字符串结尾  boolean endsWith(String str);

 

       比较

       比较字符串的顺序     int compareTo(String anotherString);【返回有三种结果,大于、小于、等于,所以用int表示,分别为正数,负数,等于】

                                            int compareToIgnoreCase(String str);【忽略大小写】

 

       其他

       String intern();如果池已经包含一个等于此String对象的字符串,则返回池中的字符串。否则,将此String对象添加到池中,并返回次String对象的引用。

       例如:

       String s1="abc";

       String s2=s1.intern();

       System.out.println(s1==s2);//true

       System.out.println(s1.equals(s2));//true

          

4、StringBuffer

      字符串缓冲区,用于存储数据的容器,

       特点:长度的可变的;

                   可以存储不同类型的数据;

                   最终要转成字符串进行使用;

                   可以对字符串进行修改。

 

5、StringBuffer的方法

       添加:

       StringBuffer append(data);//data表示任意类型的数据

       StringBuffer insert(int index,data);//在index位置上添加任意类型的数据

       删除:

       StringBuffer delete(int start,int end);//包含头,不包含尾

       StringBuffer deleteCharAt(int index);//删除指定位置的元素

       查找:

       char charAt(int index);//查找指定位置的字符

       int indexOf(String str);//查找字符串在字符串中首次出现的位置

       int lastIndexOf(String str);//查找字符串在字符串中最后一次出现的位置

       修改:

       StringBuffer replace(int start,int end,String str);//将指定位置的字符串

       替换:

       void setCharAt(int index,char ch);//将指定位置的字符串进行替换。

 

6、StringBuilder

       jdk1.5以后出现,功能与StringBuffer一样

       不同点:

       StringBuffer是线程同步的,用于多线程

       StringBuilder是线程不同步的,通常用于单线程,可以提高效率。

 

7、jdk升级的目的

       简化书写

       提高效率

       增加安全性

 

8、String的练习

       public class StringTest {

              public static void main(String[] args) {

                     String s1 = "hello";

                     String s2 = "java";

                     show(s1,s2);

                     System.out.println(s1+"...."+s2);

              }

              public static void show(String s1,String s2){

                     s2.replace('a','o');

                     s1 = s2;

              }

       }

        输入的结果为 hello java,可以这么理解,调用show方法时,传递的是地址值,在方法中,只是对地址值的赋值,并没有对字符

串的内容进行操作,所以结果是 hello java

 

9、两个字符串中最大相同的子串。

 /* "qwerabcdtyuiop"

 * "xcabcdvbn"

 * 思路:

 * 1,既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中。

 * 如果存在,短的那个字符串就是最大子串。

 * 2,如果不是呢,那么就将短的那个子串进行长度递减的方式去子串,去长串中判断是否存在。

 * 如果存在就已找到,就不用在找了。

 */

public class StringTest_3 {

       public static void main(String[] args) {

              String s1 = "qwerabcdtyuiop";

              String s2 = "xcabcdvbn";

              String s = getMaxSubstring(s2, s1);

              System.out.println("s=" + s);

       }

       public static String getMaxSubstring(String s1, String s2) {

              String max = null,min = null;

              max = (s1.length()>s2.length())?s1:s2;

              min = max.equals(s1)?s2:s1;

              System.out.println("max="+max);

              System.out.println("min="+min);

              for (int i = 0; i < min.length(); i++) {

                     for(int a = 0,b = min.length()-i; b != min.length()+1; a++,b++){

                            String sub = min.substring(a, b);

                            if(max.contains(sub))

                                   return sub;

                     }

              }

              return null;

       }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值