变强日记第十篇 String类的使用

1.字符串的创建

1.1常见的构造方法创建字符串

1.1.1 String str = “hello”;
这种方式是直接引用字符串常量池里的hello,这个hello中有一份且可以通用使用,属于常量,不可被改变。
1.1.2 String str = new String("hello");
这种方式是创建一个对象,这个对象引用的是字符串常量池中hello的引用
1.1.3

char[] chars = {'a','b','c'};
		String str = new String(chars);

2.字符串比较相等

2.1 通过(==)比较

2.1.1 如果两个字符串都直接引用字符串常量池中的对象,那么结果为相等,相当于是两个常量的比较嗷

String str1 = "Hello";
String str2 = "Hello"; 
System.out.println(str1 == str2); 
// 执行结果
true

2.1.2 如果有一个不是直接引用常量池中的对象时,结果为不相等,相当于是引用的比较,不同对象的引用肯定不一样

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

2.1 通过(equals)比较

这种方式比较的是字符串内容是否相同
不管是哪种定义方式

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

//执行结果
true

只比较最终指向的对象是否相同
注意:
在比较字符串和对象时,有两种写法
1.

String str1 = new String("Hello");
System.out.println(str1.equals(“hello”));`
String str1 = new String("Hello");
System.out.println("hello".equals(str));`

这两种方式最好选择第二种,因为他不太容易发生空指针异常

3.字符、字节与字符串

3.1 字符与字符串

字符串内部包含一个字符数组,String可以和char[]相互转换

3.1.1构造方法

①将字符数组中的内容转换为字符串
public String(char[] ch);

char[] ch = {'h','e','l','l','o'};
        String str = new String(ch);
        System.out.println(str);
//输出内容
hello

②将数组中部分内容变为字符串
public String(char[] ch,起止位置,转换几个字符)

char[] ch = {'h','e','l','l','o'};
        String str1 = new String(ch,1,2);
        System.out.println(str1);
        
//输出内容
el

3.1.2方法

①去指定索引位置的字符,索引从0开始
public char charAt(int index)

        String str = "helloWorld";
        System.out.println(str.charAt(7));
        //输出内容
        r

②将字符串以字符数组返回
public char[] toCharArray()

 String str = "helloWorld";
        char[] chars = str.toCharArray();
        for (char aChar : chars) {
            System.out.print(aChar+ " ");
        }
        //输出内容
        h e l l o W o r l d 

3.2 字节与字符串

字节常用于数据传输以及编码转换的处理之中,String 也能方便的和 byte[] 相互转换

3.2.1构造方法

①将字节数组变为字符串
public String (byte[] byt)

        byte[] byt = {1,2,5,6,7};
        String str1 = new String(byt);

②将字节数组中部分字节变为字符串
public String (byte[] byt,起始位置,长度)

        byte[] byt = {1,2,5,6,7};
        String str = new String(byt,0,3);

3.2.2 方法

①将字符串以字节数组形式返回
public byte[] getBytes()

 String string = "abcde";
        byte[] bytes = string.getBytes();
        for (byte aByte : bytes) {
            System.out.print(aByte + " ");
        }
        //输出
        97 98 99 100 101

②编码转换处理
public bytes[] getBytes(String charSetName)throws UnsupportedEncodingException

3.3 小节

纯文本文档情况下建议使用字符,影音视频建议使用字节
byte[] 是把 String 按照一个字节一个字节的方式处理, 这种适合在网络传输, 数据存储这样的场景下使用. 更适合
针对二进制数据来操作.
char[] 是吧 String 按照一个字符一个字符的方式处理, 更适合针对文本数据来操作, 尤其是包含中文的时候.

4.字符串常用操作

4.1 比较字符串

①比较两个字符串是否相等
public boolean eauals(Object o)

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

②比较两个字符串不区分大小写
public boolean equalsIgnoreCase(String str)

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

③ 比较大小关系 compareTo()
比较时,大于就返回正数,小于就返回负数,相等就返回0

 String str1 = new String("hello");
        String str2 = new String("Hello");
        System.out.println(str1.compareTo(str2));

4.2 查找字符串

①判断一个字符串是否存在
public boolean contains (CharSequence s)

 String str1 = "helloWorld";
  System.out.println(str1.contains("llo"));
  //输出 true

②从头开始查找指定字符串第一次出现的位置,查到返回该字符串的起始索引,查不到返回-1
public int indexOf (String str)

		String str1 = "helloWorld";
        System.out.println(str1.indexOf("World"));
        //输出 5

③从指定位置开始查找指定字符串第一次出现的位置,查到返回该字符串的起始索引,查不到返回-1
public int indexOf (String str,intindex)

		String str1 = "helloWorld";
        System.out.println(str1.indexOf("l",3));
        //从索引为3开始找“l”,输出3

④从后向前开始查找指定字符串第一次出现的位置,查到返回该字符串的起始索引,查不到返回-1
public int lastIndexOf (String str)

		String str1 = "helloWorld";
        System.out.println(str1.lastIndexOf("l"));
        //输出 8

⑤从指定索引位置开始查找指定字符串第一次出现的位置,查到返回该字符串的起始索引,查不到返回-1
public int lastIndexOf (String str)

  		String str1 = "helloWorld";
        System.out.println(str1.lastIndexOf("o", 5));
        //输出 4

⑥判断字符串是否以指定字符串开头
public boolean startsWith(String prefix)

        String str1 = "helloWorld";
        System.out.println(str1.startsWith("he"));
        //输出 true

⑦判断字符串指定位置是否以指定字符串开头
public boolean startsWith(String prefix, int toffset)

        String str1 = "helloWorld";
        System.out.println(str1.startsWith("Wo",5));
		//输出 true

⑧判断字符串是否以指定字符结尾
public boolean endsWith(String prefix)

        String str1 = "helloWorld";
        System.out.println(str1.endsWith("ld"));
        //输出 true

4.3 字符串替换

①替换指定内容字符
public String replaceAll(String regex , String replacement)

        String str1 = "helloWorld";
        System.out.println(str1.replaceAll("o","m"));
        //输出hellmWmrld

②替换首个指定内容
public String replaceFirst(String regex , String replacement)

        String str1 = "helloWorld";
        System.out.println(str1.replaceFirst("o", "m"));
        //输出 hellmworld

注意:

  • 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串*

4.4 字符串拆分

①将字符串全部拆分
public String[] split(String regex)
通过指定字符#和空格,将字符串分割

String str= "ab#cde fgh#ijk";
        String[] s = str.split("#| ");
        for (String s1 : s) {
            System.out.println(s1);
        }
        //输出
        ab
		cde
		fgh
		ijk

②将字符串拆分为几个 limit为个数
public String[] split(String regex,int limit)

  		String str= "ab#cde fgh#ijk";
        String[] split = str.split("#", 2);
        for (String s1 : split) {
            System.out.println(s1);
        }
        //输出结果为
        ab
		cde fgh#ijk

注意:
拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义.
代码示例: 拆分IP地址

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

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

4.5 截取字符串

①从指定索引截取到结尾
public String subString(int beginIndex)

        String str = "hellotaotao";
        String substring = str.substring(3);
        System.out.println(substring);
        lotaotao

②从指定索引截取到指定索引前一个


        String str = "hellotaotao";
        String substring1 = str.substring(3, 5);
        System.out.println(substring1);
		//输出
		lo

4.6 字符串其他方法

① 去除字符串前后的空格,保存中间空格

public String  trim();

②将字符串转为大写

public String toUpperCase();

③ 将字符串转为小写

public String toLowerCase();

④返回字符串长度

public int length();

⑤将字符串放入常量池

public native String intern ();

⑥连接字符串,不入池

public String concat();

⑦判断字符串是否为空,但不是null ,而是长度为0

public boolean isEmpty();

5. StringBuffer 和 StringBuilder

String和StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer的内容可以修改。频繁修改字符串的情况考虑使用StingBuffer。

注意:
String和StringBuffer类不能直接转换。如果要想互相转换,可以采
用如下原则:
String变为StringBuffer:利用StringBuffer的构造方法或append()方法
StringBuffer变为String:调用toString()方法

面试题:请解释String、StringBuffer、StringBuilder的区别:
String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
StringBuffer与StringBuilder大部分功能是相似的
StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值