Java中String的常用方法

java中String的常用方法
1、length() 字符串的长度
  例:char chars[]={'a','b'.'c'};
    String s=new String(chars);
    int len=s.length();

2、charAt() 根据索引截取一个字符
  例:char ch;
    ch="abc".charAt(1); 返回'b'

3、 getChars() 截取多个字符
  void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)
  sourceStart指定了子串开始字符的下标,sourceEnd指定了子串结束后的下一个字符的下标。因此, 子串包含从sourceStart到sourceEnd-1的字符。接收字符的数组由target指定,target中开始复制子串的下标值是targetStart。
  例:String s="this is a demo of the getChars method.";
    char buf[]=new char[20];
    s.getChars(10,14,buf,0);

            System.out.println(buf);运行结果  demo

4、getBytes() 替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes()。

       在java中,getBytes()方法如果不指定字符集,则得到的是一个操作系统默认的编码格式的字节数组;如果指定字符集,则得到的是在指定字符集下的字节数组,如:

byte[] b_gbk = "中".getBytes("gbk");
byte[] b_utf8 = "中".getBytes("utf-8");
byte[] b_iso88591 = "中".getBytes("iso-8859-1");

将返回"中"这个汉字分别在gbk、utf-8、iso-8859-1编码下的字节数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1。

与getBytes()方法相反,可以通过new String(byte[], charsetName)方法用指定的字符集来还原这个"中"字,如:

String s_gbk = new String(b_gbk, "gbk");
String s_utf8 = new String(b_utf8, "utf-8");
String s_iso88591 = new String(b_iso88591, "iso-8859-1");

通过打印出s_gbk、s_utf8、s_iso88591可以看到,s_gbk和s_utf8都是"中",而s_iso88591是一个乱码,这是因为iso-8859-1的编码表中,根本就没有包含汉字,因此"中".getBytes("iso-8859-1")得到的是"?"的字节数组表示,再通过new String(b_iso88591, "iso-8858-1")还原得到的是"?"。

有时候,为了让中文字符适应某些特殊要求(如http header要求其内容必须是iso-8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,如:

String s_iso88591 = new String("中".getBytes("utf-8"), "iso-8859-1");

这样得到的字符串s_iso88591实际上是三个在iso-8859-1中的字符,在将这些字符传送到目的地后,再通过相反的方式,即:

String s_utf8 = new String(s_iso88591.getBytes("iso-8859-1"), "utf-8");

从而得到正确的中文汉字"中",这样就既保证了遵守协议规定,也支持了中文。

注:

byte[] b = "中".getBytes("utf-8");
for(int i=0; i<b.length; i++) {
  System.out.println(b[i]);
}
输出-28 -72 -83是因为"中"的utf-8编码为三个字节,分别是E4 B8 AD,以E4为例,换成二进制即为:

1110 0100

该二进制数将以补码存储在内存中,最高位被视为符号位,因此原码是:

1110 0100(补码) -> 1001 1011(反码) -> 1001 1100(原码)

即-(16+8+4)=-28

5、toCharArray() 将字符串对象中的字符转换为一个字符数组

    String myString="abcd";
    char myChar[]=myString.toCharArray();
    System.out.println("myChar[1]="+myChar[1]);

    输出结果:

    myChar[1]=b

6、equals()和equalsIgnoreCase() 比较两个字符串

boolean equals(Object anObject) 
              比较此字符串与指定的对象。 
boolean equalsIgnoreCase(String anotherString) 
              将此 String 与另一个 String 进行比较,不考虑大小写。 

7、regionMatches() 用于比较一个字符串中特定区域与另一特定区域,它有一个重载的形式允许在比较中忽略大小写。
    boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)
  boolean regionMatches(boolean ignoreCase,int startIndex,String str2,int str2StartIndex,int numChars)

8、startsWith()和endsWith()

  startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束

9、equals()和==

==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int  b= 10; a==b,返回为 true。而对于下面情况:

String  a=new String("abc");

String  b=new String("abc");

a==b; 返回的则是一个false。这是因为,对于对象的比较是对对象引用的比较,对于a和b ,他们在内存中对应的地址是不一样的,所以 a==b 返回的值是一个false.

==操作符并不涉及对象内容的比较。若要对对象内容进行比较,则用equals. 如果 在本例中,a.equals(b)则返回是一个true值。

总而言之,==是对对象地址的比较,而equals是对对象内容的比较。对于基本数据类型,一般用==,而对于字符串的比较,一般用equals

10、compareTo()和compareToIgnoreCase() 比较字符串

 

compareTo:比较

compareToIgnoreCase:比较,忽略大小写

对于compareTo(), 在API中,Java.lang包下面的基本数据类型的封装类都提供了该方法,如 Integer,Float,Byte,Short,Character 等

在基本数据中,compareTo()是比较两个Character 对象;

在 Boolean中,是用boolean的实例与其它实例进行比较;

在String 中,则是按照字典顺序进行比较,返回的值是一个int 型。如果参数字符串等于此字符串,则返回 0 值;如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值;如果按字典顺序此字符串大于字符串参数,则返回一个大于 0 的值。

public class Test{ 
  public static void main(String args[]){
    String s1=new String("abc");
    String s2=new String("abc");
    System.out.println((s1==s2)? "true":"false");
    System.out.println((s1.equals(s2))? "true":"false");
    if(s1.compareTo(s2)==0){
    System.out.println("s1 is equal s2");}
    s1=s2;
    System.out.println((s1==s2)? "true":"false");
  }
}

程序的运行结果为:

false

true

s1 is equals s2

true

这里需要说明的一点,s2对象赋值给s1之后,s2和s1的引用其实是指向了内存中的同一个位置。所以,再进行比较时,就是true.

11、indexOf()和lastIndexOf()
  indexOf() 查找字符或者子串第一次出现的地方。
  lastIndexOf() 查找字符或者子串是后一次出现的地方。

12、substring() 

  它有两种形式,第一种是:String substring(int startIndex)
         第二种是:String substring(int startIndex,int endIndex)

13、concat() 连接两个字符串

       .net

14 、replace() 替换
  它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:
  String replace(char original,char replacement)
  例如:String s="Hello".replace('l','w');
  //第二种形式是用一个字符序列替换另一个字符序列,形式如下:
  String replace(CharSequence original,CharSequence replacement)

15、trim() 去掉起始和结尾的空格

16、valueOf() 转换为字符串

17、toLowerCase() 转换为小写

18、toUpperCase() 转换为大写

19、StringBuffer构造函数
  StringBuffer定义了三个构造函数:
  StringBuffer()
  StringBuffer(int size)
  StringBuffer(String str)
  StringBuffer(CharSequence chars)
  
  (1)、length()和capacity()

    一个StringBuffer当前长度可通过length()方法得到,而整个可分配空间通过capacity()方法得到。

            

StringBuffer sb = new StringBuffer();
System.out.println(sb.capacity());

运行结果

16
  
  (2)、ensureCapacity() 设置缓冲区的大小
    void ensureCapacity(int capacity)

  (3)、setLength() 设置缓冲区的长度
    void setLength(int len)

  (4)、charAt()和setCharAt()
    char charAt(int where)
    void setCharAt(int where,char ch)

  (5)、getChars()
    void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)

  (6)、append() 可把任何类型数据的字符串表示连接到调用的StringBuffer对象的末尾。
    例:int a=42;
      StringBuffer sb=new StringBuffer(40);
      String s=sb.append("a=").append(a).append("!").toString();

  (7)、insert() 插入字符串
    StringBuffer insert(int index,String str)
    StringBuffer insert(int index,char ch)
    StringBuffer insert(int index,Object obj)
    index指定将字符串插入到StringBuffer对象中的位置的下标。

  (8)、reverse() 颠倒StringBuffer对象中的字符
    StringBuffer reverse()

  (9)、delete()和deleteCharAt() 删除字符
    StringBuffer delete(int startIndex,int endIndex)
    StringBuffer deleteCharAt(int loc)

  (10)、replace() 替换
    StringBuffer replace(int startIndex,int endIndex,String str)

  (11)、substring() 截取子串
    String substring(int startIndex)
    String substring(int startIndex,int endIndex)

转载于:https://my.oschina.net/u/3352105/blog/876813

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值