java基础_08_String_StringBuffer_StringBuilder

String

特点:一但被初始化就不可以被改变。

注:java 中 char[] 就是一个字符串,concat() 方法的底层实现原理就是用数组复制完成。

下面还是通过一些实例来了解Stirng 的一些用法吧!

例:

String s1 = "abc";   //s1 是一个类的类型变量,“abc”是一个对象。

            String s2 = new String("abc");

            String s3 = "abc";

 

           s1 和 s2 有什么区别? 

              s1在内存中有一个对象

              s2在内存中有两个对象

 

     “= =” 和 equals 的区别?

   = = 判断的是地址值,看是否是指向同一个对象。

   equals 判断的是字符串的内容是否相同。

如:

System.out.println(s1==s2);  //答案 false  判断的是地址值

      System.out.println(s1==s3);  // true   s3指向“abc”对象 内存中已存在(s1先已创建),所s1s3指向的是同一个字符串对象

      System.out.println(s1.equals(s2)); // true   该方法用于判断字符串是否相同

 

字符串常用功能:

charAt(int index)返回指定索引处的 char 值

compareTo(String anotherString)按字典顺序比较两个字符串

compareToIgnoreCase(String str)按字典顺序比较两个字符串,不考虑大小写

contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true

indexOf(String str)返回指定字符在此字符串中第一次出现处的索引

indexOf(String str, int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

replace(char oldChar, char newChar) 替换,返回一个新的字符串

split(String regex)根据给定正则表达式的匹配拆分此字符串

substring(int beginIndex, int endIndex)  返回指定子串

toCharArray()返回字符数组

valueOf(Object obj)返回 Object 参数的字符串表示形式

 

更改字符串中某一字符或子串,使用替换功能。

String s1 = s.replace(  a  ,  x);  

String s2 = s.replace( abc   ,  xxx );

注意: replace 方法返回的是一个新串。

 

将字符串转化为char数组

char  chr  []  =  s.toCharArray() ;

 

去除字符串前后端的空格 ,trim() 方法。

下面模拟实现一个跟trim() 有相同功能的方法。

思路:

1,判断字符串第一个位置是否是空格,如果是继续向下判断

2,当开始和结尾都判断到不是空格时,就是要获取的字符串

public  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);

             }

       将字符串进行反转,或将字符串中指定部分进行反转

思路: 

1,可以对数组元素进行反转

2,将字符串变成数组,对数组反转

3,将反转后的数组变成字符串

4,将反转的开始和结束位置作为参数即可

 

或:可以使用 StringBuffer 来完成。该类有 反转方法 reverse() ;使用这个更方便。

例:

1, 用自己写的方法来反转

public String exchange(String s,int start,int end)

                  {

                       char chr [] = s.toCharArray();

                      char cr;

                       for(int i=start,j=end;i<j;i++,j--)

                       {

                          cr = chr [i];

                          chr [i] = chr [j];

                          chr [j] = cr;

                        }

                       return new String(chr);

                   }

2, 使用StringBuffer reverse() 方法

StringBuffer sb = new StringBuffer();

sb.append(字符串);

sb.reverse();

 

获取一个字符串s1在另一个字符串s2中出现的次数

思路:

1,定义一个计数器

2,获取s1s2中第一次出现的位置

3,从第一次出现的位置后剩余的子串中继续找,找到一个计数一次

4,当获取不到时,计数完成

如:

public int method(String s1,String s2)

{

    int count = 0;

    int start = 0;

    while((start=s2.indexOf(s1,start))!=-1)  //如果有,则继续往下查找。

    {

       start=start+s1.length();  //得从找到的角标+字符串本身长度再开始找

       count++;

    }

    return count;

 }

找出两个字符串中最大的子串

思路:

1,将短的那个字符串 按长度递减的方式 去在长的字符串中找是否包含

0--短串.length()-0

0--短串.length()-1

1--

0--短串.length()-2

1--

2--

3--

例:

 public static String maxString(String s1,String s2)

{

//方便传进来不区分长短

String longString,shortString;

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

shortString = (longString==s1)?s2:s1;

//取最大子串,所以从短串中最长开始找

for(int i=shortString.length();i>0;i--)

{

for(int j=0;(j+i)<=shortString.length();j++)

{

String s = shortString.substring(j,j+i);

// out(s);//打印取子过程

if(longString.contains(s))

return s;

}

}

return null;

}

 

StringBuffer

是字符串缓冲区,是一个容器。

 

特点

1,长度是可变化的

2,可以同时操作多个数据类型

3,最终会通过toString方法变成字符串

 

JDK1.5 版本之后出现了 StringBuilder 其功能差不多 

StringBuffer 是线程同步的

StringBuilder 线程不同步的

 

下面来熟悉下它的一些基本的操作。

StringBuffer sb = new StringBuffer();

      StringBuffer sb1 = sb.append(34);

      sop(sb==sb1);// 注意:sbsb1是同一个对象

      sb.append("abcd--").append(true).append(123);  //可以加入任何类型数据,最后会转变成字符串

      //删除

      sb.delete(0,2);

     sb.deleteCharAt(3); //删除某一位

      //清空缓冲区

     sb.delete(0,sb.length());

 

     //修改

      sb.setCharAt(5,'x'); /修改某一个

     //反转

      sb.reverse();

      //将缓冲区中的字符串取出来存到字符数组中

      StringBuffer sb2 = new StringBuffer("abcdefg");

      char chr[] = new char[6];

      sb2.getChars(1,4,chr,1);//sb21-4的字符存到chr中 从1开始放

 

心得:

字符串的使用在程序中非常多,对于的字符串的操作那就得非常熟悉了,对字符串的操作,不只有String 类的方法,还可以使用StringBuffer 的方法,StringBufferStringBuilder的用法差不多。只是是否同步的问题。正则表达式:专门用来操作字符串的,有了这个大大提高了操作字符串的效率。所以对正则的学习尤为重要。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值