String类-方法

如果String的值为null,在调用方法时则会报错。
在线查阅String类-JDK-1.6版本

0x01 获取字符串的长度

length()

  • 返回值:int

代码:

String s1 = "淤青的博客";
System.out.print(s1.length());

执行结果:

5

length和length()的区别: length是数组中的一个属性,用来获取该数组有多少个元素。而length()是String类的一个方法。用来获取该字符串的长度。


0x02 返回该索引的内容

charAt(int index)

  • 返回值:char
  • index:索引,0开始,length-1结束。

代码:

String s1 = "淤青的博客";
char c1 = s1.charAt(0);
System.out.println(c1);
System.out.println(s1.charAt(s1.length()-1));
/*注意:这里使用的是length(),
这是一个方法,而不是length属性。*/

执行结果:

淤
客

0x03 返回该索引的Unicode码

codePointAt(int index)

  • 返回值:int
  • index:索引,返回该索引的Unicode码。

代码:

String s1 = "淤青的博客";
int i = s1.codePointAt(0);
//将淤转换成Unicode码。
System.out.println(i);
//结果是28132
char c = (char)i;
//验证一下28132在Unicode位置中是不是 淤
System.out.println(c);
//结果是淤

执行结果:

28132
淤

0x04 返回该索引前一个的Unicode码

codePointBefore(int index)

  • 返回值:int
  • index:索引

codePointBefore和codePointAt大同小异,只是该方法返回的是该索引的前一位。也就是返回的是index-1,最小范围是1。

代码:

String s1 = "淤青的博客";
int i = s1.codePointBefore(1);
//返回淤的Unicode码
System.out.println(i);

char c = (char)i;
System.out.println(c);

执行结果:

28132
淤

0x05 两个字符串取Unicode码的差

compareTo(String anotherString)

  • 返回值:int
  • anotherString:需要比较的字符串

首先了解:

"A"的Unicode码为:65
"a"的UNicode码为:97
"B"的Unicode码为:66
"b"的Unicode码为:98
如果大小写转相减或相加32就可以。

该方法的功能:用调用者字符串的Unicode值来比较参数字符串的Unicode值,如果调用者字符串的Unicode值位置在前,则会返回一个小于0的数,比如:A(65)和a(97)比较,就会返回-32。

而两个字符串的Unicode值相等时,则会返回0。

如果调用者比参数大,则会返回一个大于0的数。比如:a(97)和B(66)比较,则会返回正的31。

代码:

String s1 = "a";
int i = s1.compareTo("B");
System.out.println(i);

执行结果:

31

0x06 字符串末尾拼接

concat(String str)

  • 返回值:String
  • str:需要添加在原字符串末尾的字符串

该方法和用”+”字符串拼接差不多,用”+”可以将字符串和任何数据类型连接在一起。而用concat方法的话,参数只可以是String类型,如果参数长度为0,则返回原字符串。

代码:

String s1 = "淤青";
String s2 = s1.concat("的博客");
System.out.println(s2);

String s3 = s1.concat("");
System.out.println(s3);
//打印的是:淤青,证明了不会在原字符串修改,而是拷贝一份。

执行结果过:

淤青的博客
淤青

0x07 判断字符串是否存在指定内容

contains(CharSequence s)

  • 返回值:boolean
  • s:存在的值,如果字符串包括该内容则返回true,不包括返回false。

代码:

String s1 = "淤青的博客";
boolean b1 = s1.contains("淤青");
System.out.println(b1);

boolean b2 = s1.contains("123");
System.out.println(b2);

执行结果:

true
false

0x08 String与StringBuilder进行内容比较

contentEquals(CharSequence cs):

  • 返回值:boolean
  • cs:StringBuilder内容

equals()和contentEquals()的区别:

  • equals:该方法只允许比较String内容,如果String和StringBuilder的内容一致,用equals比较的话会返回false。

  • contentEquals:使用该方法即可用String和StringBuilder正确比较。

代码:

String s1 = "淤青的博客";
StringBuilder sb1 = new StringBuilder("淤青的博客");

boolean b1 = s1.equals(sb1);
boolean b2 = s1.contentEquals(sb1);

执行结果:

false
true

0x09 将char数组以字符串形式返回

1.copyValueOf(char[] data)

  • 返回值:String
  • date:需要以字符串显示的char型数组。
  • 该方法为静态方法。

代码:

char[] c = {'淤','青','的','博','客'};
String s1 = String.copyValueOf(c);
System.out.println(s1);

执行结果:

淤青的博客

2.copyValueOf(char[] data,int offset,int count)

  • 返回值:String

  • date:需要以字符串显示的char型数组

  • offset:开始截取的索引
  • count:截取数组的长度
  • 该方法为静态方法

代码:

char[] c = {'淤','青','的','博','客'};
String s1 = String.copyValueOf(c,0,4);
//也就是从第一个开始,截取4个
System.out.println(s1);

执行结果:

淤青的博

0x10 判断字符串是否以指定内容结尾

endswith(String suffix)

  • 返回值:boolean
  • suffix:判断结尾是否该字符串

代码:

String s1 = "淤青的博客";
boolean b1 = s1.endsWith("");
boolean b2 = s1.endsWith("淤");
boolean b3 = s1.endsWith("博客");
boolean b4 = s1.endsWith("客");
System.out.println(b1+"\n"+b2+"\n"+b3+"\n"+b4);

注意: 如果endsWith方法的参数是空字符串或者等同于原字符串,那么结果会返回true。

执行结果:

true
false
true
true

0x11 比较字符串内容是否相等

eauals(Object anObject)

  • 返回值:boolean
  • abObject:比较内容的对象

注意: 该方法只适用于String与String之间比较,不适用于String与StringBuilder等比较,如有此需求请查看0x08。

代码:

String s1 = "淤青的博客";
boolean b1 = s1.equals("淤青的博客");
boolean b2 = s1.equals("淤青");
System.out.println(b1+"\n"+b2);

执行结果:

true
false

0x12 忽略大小写判断字符串内容是否相等

equalsIgnoreCase(String anotherString)

该方法和equals大同小异的是:该方法会和略大小写不同,Qing和qing用该方法比较,会返回true。


0x13 将字符串复制到char数组中

getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)

  • 返回值:void
  • srcBegin:从该字符串的第几个索引开始
  • srcEnd:截取的长度。不是索引是长度
  • dst:目标char型数组
  • dstBegin:从该数组第几个索引粘贴

注意: 类似于该方法的还有getBytes方法,由于String方法太多,就不一 一举例了,自行查阅JDK。

char[] c = new char[7];
String s = "淤青的博客";
s.getChars(1,s.length(),c,1);
for(char x : c){
    System.out.print(c);
}

执行结果:

(空格)青的博客(空格)(空格)

0x14 返回指定字符串第一次出现的索引

indexOf(String str)

  • 返回值:int
  • str:需要查找的字符串

注意: 如果没有找到该内容那么将返回-1

String s = "淤青的博客";
int i1 = s.indexOf("青");
int i2 = s.indexOf("青的");
int i3 = s.indexOf("。");
System.out.print(i1+"\n"+i2+"\n"+i3);

执行结果:

1
1
-1//因为没有找到该字符串

从指定的索引开始查找

indexOf(String str,int fromIndex)

  • 返回值:int
  • str:需要查找的字符串
  • formIndex:从指定的索引开始搜索
String s = "淤青的博客";
int i1 = s.indexOf("青",0);
int i2 = s.indexOf("青",1);
System.out.print(i1+"\n"+i2);

执行结果:

1
-1

0x15 intern方法

intern()

  • 返回值:String

使用方法: 使用字符串调用该方法的时候,会在字符串常量池中查找有没有同样内容的字符串,如果有则返回字符串常量池中的引用,如果没有,那么则在字符串常量池中新建一个,并返回字符串常量池中的引用。

代码:

String s1 = "淤青的博客";
String s2 = new String("淤青的博客");
System.out.println(s1==s2);
System.out.println(s1==s2.intern());
//判断s2调用intern方法时,是否指向字符串常量池中

执行结果:

false
true

0x16 判断是否是空字符串

isEmpty()

  • 返回值:boolean

代码:

String s1 = "";
String s2 = "淤青的博客";

System.out.println(s1.isEmpty());
System.out.println(s2.isEmpty());

执行结果:

true
false

0x17 将字符串指定格式输出

join(CharSequence delimiter,CharSequence… elements)
注意: CharSequence… elements ,这个…是可变长参数,也就是不确定到底要输入多少个元素,可以任意输入多少个。

  • 返回值:String
  • 该方法为静态方法
  • delimiter:格式符号
  • elements:字符串元素

a-b-c-d-e-f该怎么这样有格式的输出?

使用方法: 在delimiter中输入一个字符串型的符号"-",然后在elements参数中传入多个字符串,然后把结果返回给一个新的String。注意:length()==1和length()-1时,也就是只有一个字符串内容和字符串结尾处,不会添加delimiter参数内容。

代码:

String s1=String.join("-","淤","青","的","博","客");
System.out.print(s1);

执行结果:

淤-青-的-博-客

该方法还有针对集合进行操作的,具体查看JDK。


0x18 返回该字符串最后一次出现的索引

lastIndexOf(String str)

  • 返回值:int
  • str:需要查找的字符串

如果找到了则返回索引,没找到返回-1

String s1 = "淤青的博客";
int i = s1.lastIndexOf("客");
System.out.print(i);

执行结果:

4

从指定的的范围内查找

lastIndexOf(Strint str,int formIndex)

  • formIndex:从该索引结束。如果在该索引的范围内没有查找到指定内容,则返回-1。

代码:

String s1 = "淤青的博客";
int i1 = s1.lastIndexOf("淤",0);
int i2 = s1.lastIndexOf("青",0);
//青的索引是1,而参数写的0,只可以查询带淤,所以返回-1
System.out.println(i1+"\n"+i2);

执行结果:

0
-1

0x19 regionMatches方法

regionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len)
  • 返回值:boolean
  • ignoreCase:控制是否开启忽略大小写,为true时忽略,false关闭。
  • toffset:从该索引位置开始比较。
  • other:需要比较的字符串。
  • ooffset:从该索引开始比较。
  • len:需要比较的长度。

代码:

String s1 = "yuqing";
String s2 = "YUQING";
boolean b1 = s1.regionMatches(true,0,s2,0,3);
boolean b2 = s1.regionMatches(false,0,s2,0,3);

System.out.println(b1+"\n"+b2);

执行结果:
true

该方法还有一个重载方法,把ignoreCase参数去掉就是了。


0x20 输入新字符将指定旧内容替换

replace(CharSequence target,CharSequence replacement)

  • 返回值:String
  • target:原字符串中需要被替换掉的内容
  • replacement:新内容

代码:

String s1 = "yuqing";
String s2 = s1.repace("yu","qqq");
System.out.println(s2);

执行结果:

qqqqing

0x21 将指定内容全部更换

replaceAll(String regex,String replacement)

  • 返回值:String
  • regex:需要被更换的字符
  • replacement:新内容

代码:

String s1 = "112233";
String s2 = s1.replaceAll("2","6");
System.out.println(s2);

执行结果:

116633

0x22 将查询到的第一个字符更换

replaceFirst(String regex,String replacement)

  • 返回值:String
  • regex:需要被更换的字符
  • replacement:新内容

注意: 如果该字符串中查询到了多个regex参数内容,那么该方法不会全部更换只会更换第一个位置的内容。

代码:

String s1 = "112222";
String s2 = s1.replaceFirst("2","6");
System.out.println(s2);

执行结果:

116222

0x23 判断是否以指定字符开头

startsWith(String prefix)

  • 返回值:boolean
  • prefix:是否以该内容开头

代码:

String s1 = "http://yq2048.cn";
boolean b = s1.startsWith("http://");
System.out.println(b);

执行结果:

true

通过指定索引判断是否以指定内容开头

startsWith(String prefix,int toffset)

  • 返回值:boolean
  • prefix:是否以该内容开头
  • toffset:在该索引开始判断

代码

String s1 = "http://yq2048.cn";
boolean b = s1.startsWith(".cn",s1.length()-3);
//验证后缀是否以.cn结尾
System.out.println(b);

执行结果:

true

0x24 通过指定索引位置分割字符串

substring(int beginIndex)

  • 返回值:String
  • beginIndex:返回该索后的内容

代码:

String s1 = "淤青的博客";
String s2 = s1.substring(1);
System.out.print(s2);

执行结果:

青的博客

返回开始索引和结束索引中的字符串

substring(int beginIndex,int endIndex)

  • 返回值:String
  • beginIndex:开始的索引,包括该索引
  • endIndex:结束索引(不包括该索引),也就是说该索引前一位才是最终点。

代码:

String s1 = "淤青的博客-yq2048.cn";
String s2 = s1.substring(1,12);
System.out.println(s2);

执行结果:

青的博客-yq2048

0x25 通过指定字符分割字符串

split(String regex)

  • 返回值:String[]
  • regex:指定字符串

使用方法: 在该字符串中,查找regex参数内容,找到后将该regex前的内容返回给第一个元素,如果后面还有regex内容,那么将第二个regex前的内容(到第一个regex内容后截止)赋值给第二个元素。

代码:

String s1 = "小龙虾,啤酒,花生米,烤串,铁铁";
String[] s2 = s1.split(",");

for(int i = 0;i<s2.length;i++) {
    System.out.println("第"+i+"个元素是:"+s2[i]);
}

执行结果:

第0个元素是:小龙虾
第1个元素是:啤酒
第2个元素是:花生米
第3个元素是:烤串
第4个元素是:铁铁

0x26 将字符串转换成char型数组

toCharArray()

  • 返回值:void

代码:

String s1 = "淤青的博客";
char[] c = s1.toCharArray();
for(char x : c){
    System.out.print(x+" ");
}

执行结果:

淤 青 的 博 客 

0x27 将字符串转换成小写

toLowerCase()

  • 返回值:String

代码:

String s1 = "AABBCC";
String s2 = s1.toLowerCase();
System.out.println(s2);

执行结果:

aabbcc

0x28 将字符串转换成大写

toUpperCase()

  • 返回值:String

代码:

String s1 = "aabbcc";
String s2 = s1.toUpperCase();
System.out.println(s2);

执行结果:

AABBCC

0x29 删除字符串前缀和后缀的空格

trim()

  • 返回值:String

注意: 删除的是第一个字符前的内容,如果第一个字符后还有空格,则不会删除第一个字符后的空格。

代码:

String s1 = "    淤青的博客    ";
String s2 = "。  淤青的博客   。  ";

String s3 = s1.trim();
String s4 = s2.trim();

System.out.println(s3+"\n"+s4);

执行结果:

淤青的博客
。  淤青的博客   。

妈的,终于弄完了~~ hhh!!(^▽^)

发表评论 / Comment

用心评论~