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是0String 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.判断字符串是否在另一个字符串中

IndexOf

(如果存在,则返回位置,不存在,返回-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

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

栈:对象的实例

在堆中开辟空间产生对象

试题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<->String

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);
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值