五、String字符串常用方法

String

大家在学习String字符串中通常会学到许多方法,拼接截取等等,今天写道这里方便大家参考,有什么需要补充的请与我联系

定义字符串的三种方式

方式一

String string = "abc";

方式二

String string = new String("abc");

方式三

String string = new String();//值为""
---------------
static String st1;//值为unll

辨析

通用理论

对于非基本类型(对象类型|引用类型)

1.只定义,不new(实例化) ,默认值都是null,

​ 例:Person per;/String s3;

2.new(实例化)后值:

  • 只要实例化值就不为null
  • 内部属性的值 目前 全部是数据类型的默认值
String s3 = new String() ;  值 s3:""
Person per = new Person(); per :name是null  age是0
   (String name,int age)

常见的String方法

1.严格大小写.equals()

String str = "helloworld" ; 
boolean flag = str.equals("helloworld");
System.out.println(flag);//true

2.忽略大小写.equalsIgnoreCase

String str = "helloworld" ;  
boolean flag =str.equalsIgnoreCase("helloWorld") ;
System.out.println(flag);//true

3.字符串长度.length

String str  = "woaini";
int len = str.length();
System.out.println(len);//6

4.小写字母转成大写字母.toUpperCase

String str  = "woaini";
str = str.toUpperCase();
System.out.println(str);//WOAINI

5.大写字母转小写.toLowerCase

String str  = "woaini";
str = str.toLowerCase();
System.out.println(str);//woaini

6.判断字符串是否在另一个字符串中

lastIndexOf

(如果存在,则返回位置,不存在,返回-1;)

 String str = "helloworld" ; 
//从前往后找
int position =  str.IndexOf("owo") ;
//从后往前找
int position =  str.lastIndexOf("owo") ;
 System.out.println(position);//4

7.去掉首位空格和末尾空格 .trim

不去中间空格

 String str = " helloworld " ; 
System.out.println("去空格之前的长度"+str.length());//14
str = str.trim();
System.out.println("去首位空格的长度"+str.length());//10

8.截取字符串.substring

(数字)左闭右开,[) 左面能取到,右面取不到

1.两个数字,从a截取到b

2.一个数字从a 截取到末尾!

String phone = "19920124443";
phone = phone.substring(2,6);
System.out.println(phone);//9201

9.拆分字符串、返回数组!.split/stringtoknizer

String phone ="029-12345678";
//根据-来前后分割
String[] ps  = phone.split("-");
System.out.println(ps[0]);//029
System.out.println(ps[1]);//12345678

//特殊符号分割需要加转义符/特殊字符。| \ $ + ,加转义符变 
String phone ="029.12345678";
//根据-来前后分割
String[] ps  = phone.split("//.");
System.out.println(ps[0]);//029
System.out.println(ps[1]);//12345678

String str = "hello|world";
//有参,1.数组名2.分隔符
StringTokenizer token = new StringTokenizer(str,"|");
//token指向上一个元素token.hasMoreElements()判断是否有下一个元素/
//如果有,a:true b:直、指向下一个元素
while(token.hasMoreElements()){
   
    //nextElement()取出当前元素
System.out.println(token.nextElement());
}

10.根据所给位置找到字母.charAt();

String str = "helloword" ;
System.out.println(  str.charAt(2));//l

11.替换字符单个,或者多个.replace();

String str = "helloword" ;
str = str.replace("h","y") ;
 System.out.println(str);//yelloword
str = str.replcae("ll","ss");
 System.out.println(str);//yessoword

String常量池

正常赋值创建String

使用字符串时,先在常量池中寻找,如果有,则使用;如果无,则创建后放入常量池,并使用

String str1 = "hello";
String str2 = "hello";
System.out.println(str1 == str2);//true

通过new 创建String

String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1==str4);//false

JVM

堆:放基本类型和引用类型

栈:对象的实例

String面试题

在堆中开辟空间产生对象

试题1.

String str = new String("hello");

上面一句话创建了多少对象?

答:如果之前常量池中不存在hello,则产生了2个对象+1个引用

​ 如果常量池中存在hello,则产生了一个对象(堆中的)+1个引用

​ 2个情况:如果之前不存在hello先在常量池创建一个hello字符串,堆中创建块,栈中引用堆;

试题2.

Sting str = new String("a"+"b");

初始:常量池为空

产生了多少对象?(暂时不考虑引用类型)

答:4个(常量池中3个{a,b,ab},堆中1个)+1个引用

试题3.

String str = new String("ABC")+"abc";

初始:常量池为空

产生了多少对象?

答:3个+1个引用

总结

字符串,如果直接使用字面量

String str = “abc”; ,则从常量池中找

如果使用的是new ,则从堆中找(而堆又会从常量池中找)

常量池中不存在,则创建,并引用该常量池中的字符串(使用常量池中的内存地址)

如果new 之后仍然想从常量池中获取,不通过堆的方式该怎么办?

使用inter()方法

String str1 = "hello";
String str2 = new String("hello");
System.out.println(str1==str2);//false
//----------------------------------------
String str1 = "hello";
String str2 = new String("hello");
str2 = str2.inter();//String中的intern()方法,可以让引用直接指向常量池
System.out.println(str1==str2);//true

StringBuffer:String的增强版

比String最大的升级,可以在原来的内存空间中直接修改变量值

常用方法

 StringBuffer sb = new StringBuffer("abc");
        sb.append("aaa") ;//追加 可以接收也可以不接收 abcaaa
        sb.insert(2,"ww");//插入 插入位置,插入单词 abwwcaaa
        sb.reverse();//逆序 aaacwwba
        System.out.println(sb);

String、tringBuffer各自独立,相互转换

String->StringBuffer
String str = "asd";
StringBuffer sb = new StringBuffer(str) ;
System.out.println(sb);

StringBuffer->String

方法一

StringBuffer sb = new StringBuffer("sssa") ;
String sb = sb.toString();
System.out.println(sb);

方法二

StringBuffer sb = new StringBuffer("sds") ;
String as = sb + "";//任何类型遇字符串都会转换成字符串
System.out.println(as);

常见方法

Date

    Date date = new Date();
    System.out.println(date);
        //Date<->String用SimpleDateFormat方法
        //想要输出的日期格式通过构造方法的函数进行实现
        //YYYY-MM-dd
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd") ;
        String dataStr = sdf.format(date) ;
        System.out.println(dataStr);
全部评论

相关推荐

11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务