Java三大特殊类之----String类

1.String 类实例化方式

- 直接赋值:

String str = "Hello";
//str是一个对象,"Hello"应保存在堆内存中
System.out.println(str);

String类既是一个类,那么类中一定存在构造方法。
String类的其中一种构造方法如下:

public String(String str);

- 传统方法(构造法):

String str = new String("Hello");
System.out.println(str);

2.字符串相等比较

String类要想进行内容比较,就必须采用String类提供的equals方法。

eg:使用equals方法比较字符串内容

String str1 = "Hello ";
String str = new String("Hi");
System.out.println(str1.equals(str));

请解释String 类 == 与 equals 的区别:

  1. “==”进行的数值比较,比较的是俩个字符串对象的内存地址数值。
  2. “equals()”:可以进行字符串内容的比较。

3.String的匿名对象

任何的字符串常量都是String的匿名对象,所以该对象永远不会为null;

eg:观察字符串常量

String str1 = "Hello";
String str = new String("Hello");
System.out.println(str1.equals(str));
System.out.println("Hello".equals(str));

在进行比较时,强烈建议将字符串常量写在前面。避免如下情况:

Sting str = null;//假定由用户输入
System.out.println(str.equals("Hello"));

在进行接收用户输入数据的时候一定要考虑用户没有输入的问题,以上代码为例,用户没有输入时,一定会出现NullPointerException 问题。

4.实例化的区别

4.1采用直接赋值:

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

在JVM底层实际上会自动维护一个对象池(字符串对象池),如果采用了直接赋值的模式进行String类的对象实例化操作,那么该实例化对象(字符串内容)将自动保存在这个常量池中。如果下次继续使用直接赋值的模式声明String类对象,此时对象池中若有指定内容,将直接进行引用;若没有,则开辟新的字符串对象而后将其保存在对象池之中以供下次使用。

所谓对象池就是一个对象数组(目的是减少开销)。

4.2采用构造方法

类对象使用构造方法实例化是标准做法,而使用构造方法实例化的对象不会自动入池。分析程序如下:

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

在String类中提供有方法入池操作:public String intern();

String str1 = new String("Hello").intern();
String str2 = "Hello";
System.out.println(str1 == str2);//true

请解释String类中俩种对象实例化的区别:

  1. 直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。
  2. 构造方法:会开辟俩块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用 intern()方法手工入池。

5.字符与字符串

字符串就是一个字符数组,所以在String类里面支持有字符数组转换为字符串以及字符串转变为字符的操作方法。

  • 构造方法:
    1.public String(char value[]):将字符数组中的所有内容变为字符串。
    2. public String(char value[],int offset,int count):将部分字符串数组中的内容变为字符串

  • 普通方法:
    1.public char charAt(int index):取得指定索引位置的字符,索引从0开始

    2.public char[] toCharArray():将字符串变为字符数组返回

eg:字符串与字符数组的转换

String str = "helloworld";
char[] data = str.toCharArray();
for(int i = 0;i < data.length;i++){
    data[i] -= 32;
    System.out.println(data[i] +"、");
}
 System.out.println(new String(data)); // 全部转换
 System.out.println(new String(data,5,5)); //部分转换

6.字符串比较

6.1 区分大小写的比较:public boolean equals(Object anotherObject)

6.2不区分大小写的比较:

public boolean equalsIgnoreCase(String anotherString)

eg :

String str1 = "hello" ;
String str2 = "Hello" ;
System.out.println(str1.equals(str2)); // false
System.out.println(str1.equalsIgnoreCase(str2)); // true

6.3 比较俩个字符串大小关系

public compareTo(String anotherString)

eg:观察compareTo()比较:

System.out.println("A".compareTo("a")); // -32
System.out.println("a".compareTo("A")); // 32
System.out.println("A".compareTo("A")); // 0
System.out.println("AB".compareTo("AC")); // -1

7.字符串查找

在这里插入图片描述

eg:字符串查找,好用方便的就是contains()

String str = "helloworld" ;         
System.out.println(str.contains("world")); // true

eg:使用indexOf()方法进行位置查找:

String str = "helloworld" ;         
System.out.println(str.indexOf("world")); // 5,w开始的索引        
System.out.println(str.indexOf("bit")); // -1,没有查到        
if (str.indexOf("hello") != -1) {            
    System.out.println("可以查到指定字符串!");      
}

使用indexOf()需要注意的是,如果内容重复,它只能返回查找的第一个位置

eg:判断开头或结尾

String str = "**@@helloworld!!" ;         
System.out.println(str.startsWith("**")); // true        
System.out.println(str.startsWith("@@",2)); // ture        
System.out.println(str.endsWith("!!")); // true

8.字符串替换

使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:

8.1替换所有指定内容:

public String replaceAll(String regex,String replacement)

8.2替换首个内容

public String replaceFirst(String regex,String replacement)

eg:字符串替换处理

String str = "helloworld" ;
System.out.println(str.replaceAll("l", "_")); //he__owor_d
System.out.println(str.replaceFirst("l", "_"));//he_loworld

9.字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
可用方法如下:

9.1将字符全部拆分

public String[] split(String regex)

9.2将字符串部分拆分,该数组长度就是limit极限:

public String[] split(String regex,int limit)

eg:实现字符串的拆分处理

String str = "hello world hello bit" ;        
String[] result = str.split(" ") ; // 按照空格拆分        
for(String s: result) {            
    System.out.println(s);       
}

eg:字符串的部分拆分

String str = "hello world hello " ;         
String[] result = str.split(" ",2) ;         
for(String s: result) {            
    System.out.println(s);       
}

eg:多次拆分

String str = "CYJ:20|SR:0701" ;
String[] result = str.split("\\|") ;
for (int i = 0; i < result.length; i++) {
    String[] temp = result[i].split(":") ;
    System.out.println(temp[0]+" = "+temp[1]);
}
//  输出:
CYJ = 27
SR = 0701

10.字符串截取

10.1从指定索引截取到结尾:

public Stirng substring(int beginIndex)

10.2 截取部分内容:

public String substring(int geginIndex,int endIndex)

eg:字符串截取

String str = "helloworld" ;
System.out.println(str.substring(5)); //world
System.out.println(str.substring(0, 5));//hello

11.其他操作方法

在这里插入图片描述

eg:观察trim()方法的使用

String str = "   hello  world   " ;
System.out.println("["+str+"]"); //[   hello  world   ]
System.out.println("["+str.trim()+"]"); //[  hello  world  ]

eg:大小写转换:

String str = "   hello%$$%@#$%world 哈哈哈  " ;
System.out.println(str.toUpperCase());  //   HELLO%$$%@#$%WORLD 哈哈哈 
System.out.println(str.toLowerCase());  //  hello%$$%@#$%world 哈哈哈 

eg:字符串length()

String str = "hello" ;
System.out.println(str.length()); // 5

eg:isEmpty()方法

System.out.println("hello".isEmpty()); //  false
System.out.println("".isEmpty()); //true
System.out.println(new String().isEmpty());//true

String类并没有提供首字母大写操作,需要自己实现。

eg:首字母大写

public static void main(String[] args) {
    System.out.println(fistUpper("selina"));
    System.out.println(fistUpper(""));        
    System.out.println(fistUpper("a"));    }
    public static String fistUpper(String str) {
    if ("".equals(str)||str==null) {
        return str ;
    }
    if (str.length()>1) {
        return str.substring(0, 1).toUpperCase()+str.substring(1) ;
    }
    return str.toUpperCase() ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值