Java中String类的使用

目录

1. (MS)String 类中两种对象实例化的区别

1.1  直接赋值

1.2  构造方法

2. 字符,字节与字符串

 2.1 字符与字符串转换

2.2 字节与字符串转换

3. 字符串常见操作

3.1 字符串比较

3.2 字符串查找

3.3 字符串替换

3.4 字符串拆分

3.5 字符串截取

3.6 字符串的其他操作

4. StringBuilder 和 StringBuffer


 

1. (MS)String 类中两种对象实例化的区别

1.1  直接赋值

String str = "hello";  

直接赋值只会开辟一块堆内存空间,并且该字符串对象可以自动保存在常量池中,以供下次使用。

Java中String类的使用_第1张图片

1.2  构造方法

String str1 = new String(" hello "); 

会开辟两块堆内存空间,不会自动保存在常量池中,可以使用intern()方法手工入池。

String str1 = new String(" hello ") . intern() ; 

Java中String类的使用_第2张图片

2. 字符,字节与字符串

 2.1 字符与字符串转换

 将字符数组变为字符串(char[ ] ---->  String)

char[] data = {'A','B'};
String str = new String(data);

将部分字符数组中的内容变为字符串(char[ ] ---->  String)

char[] data = {'A','B','C','D',E'};
String str = new String(data,5,5);

取得指定索引位置的字符,索引从0开始

String str = "hello";
System.out.println(1);
//输出 e

将字符串变为字符数组返回 String -----> char[ ]

String str = "helloword";
char[] data = str.toCharArray();

2.2 字节与字符串转换

将字节数组变为字符串 byte[ ] -----> String

byte[] data = {104,101, 108 ,108 ,111 ,119 ,111 ,114 ,108 ,100 };
String str = new String(data);

将部分字节数组中的内容转换为字符串

byte[] data = {104,101, 108 ,108 ,111 ,119 ,111 ,114 ,108 ,100 };
String str = new String(data,1,5);

将字符串以字节数组的形式返回  String  ----->  byte[ ]

String str = "helloworld";
byte[] data = str.getBytes();

3. 字符串常见操作

3.1 字符串比较

 区分大小写比较

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

 不区分大小写比较

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

 比较两个字符串大小关系

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

3.2 字符串查找

 判断一个字符串是否存在

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

 从头开始查找指定字符串,查找到了就返回开始索引,没有查找到,就返回-1

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

String str = "helloworld" ; 
System.out.println(str.indexOf("world")); // 5,w开始的索引
System.out.println(str.indexOf("bit")); // -1,没有查到

从指定位置开始查找字符串的位置 

String str = "helloworld" ; 
System.out.println(str.indexOf("e",5)); // 1

从后向前查找子字符串位置 

String str = "helloworld" ;
System.out.println(str.lastIndexOf("l")); // 8

从指定位置由后向前查找 

String str = "helloworld" ;
System.out.println(str.lastIndexOf(3,"l")); 

 判断是否以指定字符串开头

String str = "helloworld" ; 
System.out.println(str.startsWith("h")); // true

 从指定位置开始判断是否以指定字符串开头

String str = "helloworld" ; 
System.out.println(str.startsWith("l",3)); // true

判断是否已指定字符串结尾 

String str = "helloworld" ; 
System.out.println(str.endsWith("d")); // true

3.3 字符串替换

 替换所有的指定内容

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

 替换首个内容 

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

3.4 字符串拆分

字符串全部拆分 

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

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

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

 拆分IP地址

String str = "192.168.1.1" ; 
String[] result = str.split("\\.") ; 
for(String s: result) { 
     System.out.println(s); 
}

注意事项 :
         1. 字符"|","*","+"都得加上转义字符,前面加上"\".
         2. 而如果是"",那么就得写成"\\".
         3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

3.5 字符串截取

 从指定索引截取到结尾

String str = "helloworld" ; 
System.out.println(str.substring(5));

截取部分内容 

String str = "helloworld" ; 
System.out.println(str.substring(0, 5));
注意事项 :
           1. 索引从0开始
          2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

3.6 字符串的其他操作

去掉字符串中的左右空格,保留中间的空格

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

字符串转大写

String str = "hello" ; 
System.out.println(str.toUpperCase());  // HELLO

字符串转小写

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

是否为空

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

4. StringBuilder 和 StringBuffer

任何的字符串常量都是 String 对象,而且 String 的常量 一旦声明不可改变 ,如果改变对象内容,改变的是其引用的指向而已。
由于 String 不可更改特性 ,为了 方便字符串的修改 ,提供 StringBuffffer 和 StringBuilder类。
(StringBuilder 通常用在单线程中,StringBuffer 通常用在多线程中)

String --- > StringBuilder

String str = "hello";
StringBuilder sb = new StringBuilder(str);

StringBuilder --- >String  

StringBuilder sb = new StringBuilder("hello");
String str = sb.toString();

字符串反转

StringBuffer sb = new StringBuffer("helloworld"); 
System.out.println(sb.reverse());
删除指定范围的数据
StringBuffer sb = new StringBuffer("helloworld"); 
System.out.println(sb.delete(5, 10));

 插入数据

StringBuffer sb = new StringBuffer("helloworld"); 
System.out.println(insert(0, "你好"));

MS: StringStringBufffferStringBuilder的区别

1.String的内容不可修改,StringBuffffer与StringBuilder的内容可以修改.

2. StringBuffffer与StringBuilder大部分功能是相似的

3. StringBuffffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

 

你可能感兴趣的:(Java,java)