java中String是类_Java中String类和常用方法

Java中String类和常用方法

实例化String对象

第一直接赋值

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String name="zhangsan";

System.out.println("姓名:"+name);

}

}

结果

姓名:zhangsan

第二

String str=new String();

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String name=new String("zhangsan");

System.out.println("姓名:"+name);

}

}

结果

结果

姓名:zhangsan

String的内容比较

因为基本类型是使用“==”进行数据比较

下面首先使用“==”进行比较

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

int x,y;

x=32;

y=32;

System.out.println("基本数据类型进行比较:"+(x==y));

String str1="zhangsan";

String str2=new String("zhangsan");

String str3=str2;

System.out.println("str1==str2-->"+(str1==str2));

System.out.println("str2==str3-->"+(str2==str3));

}

}

结果

基本数据类型进行比较:true

str1==str2-->false

str2==str3-->true

0818b9ca8b590ca3270a3433284dd417.png

这里使用的判断相等,是判断的地址空间是否相等,判断的是地址值

如果要判断内容是否相等,则必须使用String类中提供的equals()方法完成

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str1="zhangsan";

String str2=new String("zhangsan");

String str3=str2;

System.out.println("str1==str2-->"+str1.equals(str2));

System.out.println("str1==str3-->"+str1.equals(str2));

System.out.println("str2==str3-->"+str2.equals(str3));

}

}

结果

str1==str2-->true

str1==str3-->true

str2==str3-->true

结论

一种使用“==”比较的是地址值

另一种使用“equals”方法完成:比较的是具体的内容

两种实例化方式的区别

在String中可以直接赋值,和new进行实例化,哪一种更合适?

一个字符串就是String类的匿名对象

比如 "hello".equals("hello");

String str1="zhangsan";

就表示将一个堆内存空间的指向给了栈内存

事例

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str1="zhangsan";

String str2="zhangsan";

String str3="zhangsan";

System.out.println("str1==str2-->"+(str1==str2));

System.out.println("str1==str3-->"+(str1==str2));

System.out.println("str2==str3-->"+(str2==str3));

}

}

结果

str1==str2-->true

str1==str3-->true

str2==str3-->true

这个时候他们的地址是一样的

0818b9ca8b590ca3270a3433284dd417.png

使用直接赋值的方式可以节约内存

使用new的方式

public class Test4 {

public static void main(String[] args) {

String str1=new String("zhangsan");

}

}

0818b9ca8b590ca3270a3433284dd417.png

使用new的方式开辟了两次空间,因为String str=new String("hello");

这个("hello")本身就是一个匿名对象,此时已经开辟了堆内存空间,而此时再次尽心new的时候new String("hello");又一次开辟了内存空间,所以一共开辟了两次内存空间

使用直接赋值的方式只需要一个实例化对象即可,而使用new String()的方式则意味着开辟两个内存对象,最好使用直接赋值的方式完成

下面:字符串的内容不可改变

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

str=str+",world";

System.out.println(str);

}

}

结果

hello,world

此时字符串对象是改变了,但是字符串并没有改变

0818b9ca8b590ca3270a3433284dd417.png

实际上字符串的改变实际上改变的是内存地址的引用关系

在开发中要避免下面的操作

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

for (int i = 0; i <10; i++) {//循环改变内容

str=str+i;//字符串的引用不断改变

}

}

}

下面String类的常用方法

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

将字符串变为字符数组

char[]()

将此字符串转换为一个新的字符数组。

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

char c[]= str.toCharArray();

for (int i = 0; i 

System.out.print(c[i]+"、");

}

}

}

结果

h、e、l、l、o、

将字符数组变为字符串

(char[] value)

分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

char c[]= str.toCharArray();

for (int i = 0; i 

System.out.print(c[i]+"、");

}

String str1=new String(c);

System.out.println("\n"+str1);

}

}

结果

h、e、l、l、o、

hello

取出指定位置的字符

char(int index)

返回指定索引处的 char值。

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

char c= str.charAt(3);

System.out.println(c);

}

}

结果

l

字符串与byte数组的转换

byte数组(字节数组),在一般的io操作中经常用到

在String类中提供了下面的方法

字符串变为字节数组

byte[]()

使用平台的默认字符集将此 String编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

将一个字节数组变为字符串

(byte[] bytes)

通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。

将部分字节数组变为字符串

(byte[] bytes, int offset, int length)

通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

byte [] bytes=str.getBytes();

System.out.println(new String(bytes));

System.out.println(new String(bytes,1,3));

}

}

结果

hello

ell

取得字符串的长度

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hellofdsafdsafdsadfs";

System.out.println("长度:"+str.length());

}

}

结果

长度:20

注意:在操作数组的时候可以使用“数组名字.length”,那么这里习惯性的在字符串操作的地方也使用“字符串.length”的格式,后面没有括号,str是一个对象这里的length是一个方法。

查找指定的字符串是否存在

int(int ch)

返回指定字符在此字符串中第一次出现处的索引。

int(int ch, int fromIndex)

返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

查找的时候方法的返回值是 一个int类型的数据,此数据表示的是一个字符串的位置,如果没有则返回-1;

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="abcdefghijklmnccc";

System.out.println("c:"+str.indexOf("c"));

System.out.println("c:"+str.indexOf("c",4));

System.out.println("c:"+str.indexOf("c",15));

}

}

结果

c:2

c:14

c:15

取得空格

trim ()

返回字符串的副本,忽略前导空白和尾部空白。

如果假设一些信息是由用户输入的话,则就可能出现多余的空格,在这种操作中可以使用trim()取得字符串的左右空格,但是字符串中间的空格是不能去掉的

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="            hello aa   ";

System.out.println("没有取得的时候:"+str);

System.out.println("取得左右空格后:"+str.trim());

}

}

结果

没有取得的时候:            hello aa

取得左右空格后:hello aa

字符串截取

取出字符串中的部分内容

(int beginIndex)

返回一个新的字符串,它是此字符串的一个子字符串。从截取处到尾

(int beginIndex, int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。从指定的范围中截取

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello world";

System.out.println(str.substring(5));//从6到最后

System.out.println(str.substring(5, 9));

}

}

结果

world

wor

拆分字符串

[]( regex)

根据给定的匹配拆分此字符串。

[]( regex, int limit)

根据匹配给定的来拆分此字符串。

需要正则支持的

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello world";

String s[]=str.split(" ");//按空格进行拆分

for (int i = 0; i 

System.out.print(s[i]+"、");

}

}

}

结果

hello、world、

大小写转换

小写变成大写

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

String str1="ABC";

System.out.println(str.toUpperCase());

System.out.println(str1.toLowerCase());

}

}

结果

HELLO

abc

不区分大小写 equalsIgnoreCase();

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

String str1="HELLO";

System.out.println(str.equalsIgnoreCase(str1));

System.out.println(str1.equals(str));

}

}

结果

true

false

字符串替换功能

package com.qn.array;

public class Test4 {

public static void main(String[] args) {

String str="hello";

String newStr=str.replaceAll("l", "x");

System.out.println("替换之后的内容:"+newStr);

}

}

结果 替换之后的内容:hexxo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值