Java字符串的常规使用方法

本文详细介绍了Java中的字符串处理,包括创建字符串对象、常用方法如长度、索引查找、替换和比较,以及StringBuilder和StringBuffer的区别,特别强调了线程安全性和字符串类型转换。
摘要由CSDN通过智能技术生成

Java字符串

        创建一个字符串对象

                在Java中用" "(双引号)括起来的都是字符串

                               用' '(单引号)括起来的都是字符

                字符串的内容不能发生改变,创建后不能被更改

                如果想对字符串的内容进行更改,需要使用StringBuffer或StringBuilder

//直接创建
String s = "abc";

//使用字符数组创建
char[] c = {'a','b','c'};
String str = new String(c);

        字符串常用方法
  • 求字符串的长度——  int length()
System.out.println(s.length());
  • 查找指定字符的索引—— int indexOf()

        索引从0开始,如果有多个相同字符,则返回此字符第一次出现的位置

System.out.println(s.indexOf("a"));
  • 查找指定的字符—— char charAt()

        可以通过此方法,遍历整个字符串,输出所有字符

String s = "abc";
for(int i = 0;i<s.length();i++) {
	System.out.println(s.charAt(i));
}
//换行逐个输出:abc
  • 去除字符串首尾的空格——String trim() 
String s = " abc ";
System.out.println(s.trim());
//输出结果abc
  • 判断是否包含某个字符——Boolean contains() 
String s = "abc";
System.out.println(s.contains("a"));
  • 判断是否从某个字符开始/结束 ——Boolean startWith() / endsWith()
String s = "abc";
System.out.println(s.startsWith("a"));
System.out.println(s.endsWith("c"));
  • 替换字符—— replace(char old,char new) 
String s = "abc";
System.out.println(s.replace("c", "d"));
//输出:abd
比较两个字符串是否相等 
  •  比较两个字符串是否相等——Boolean equals()

        这里需要注意一个问题,“==”运算符和 equals()方法的区别

使用“==”运算符做比较:

        如果比较的是基本数据类型,就会比较两者的数据值是否相同

        如果比较的是引用数据类型,就会比较两者的地址值是否相同

使用equals()方法做比较:

        如果比较的是字符串,就会比较两者内容是否相同,因为String重写了equals()方法

        如果比较的是对象,就会比较两者的对象的引用是否相同

举几个例子

        首先来看一下字符数组的比较

char[] c1 = {'a','b','c'};
char[] c2 = {'a','b','c'};
System.out.println(c1==c2);
System.out.println(c1.equals(c2));
System.out.println(Arrays.equals(c1, c2));

输出:  
false
false
true

解释一下为什么会输出这样的结果 

第一个false:因为字符数组是一个对象,属于引用数据类型,它们的地址不同

                      “==”运算符比较的是两者的地址是否相同,所以输出false

第二个false:equals()方法是比较两者是否是同一个对象,显然不是同一个数组对象,输出false

第三个true:Arrays.equals()方法只比较两个数组中的内容是否相同,因此输出true

        再来看一下字符串

String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));

输出:
true
true

这里可能就有疑问了,为什么看起来不是同一个对象,比较的时候还会输出true

因为用到了内存中的常量池,当运行到s1创建对象时,如果常量池中没有,就在常量池中创建一个对象"abc",第二次创建的时候,就直接使用,所以两次创建的对象其实是同一个对象,它们的地址值相同

        最能体现“==”和equals()方法两者区别的地方来了

char[] c = {'a','b','c'};
String s1 = new String(c);
String s2 = "abc";
		
System.out.println(s1==s2);
System.out.println(s1.equals(s2));

输出:
false
true

第一个false:虽然两个字符串具有相同的值,但它们在内存中的地址不同,因此输出false

第二个true: 由于String重写了equals()方法,只比较字符串的内容,因此输出true

字符串类型转换

int转String

        第一种方法:用空的字符串与int相加

int number = 100;
String str = ""+number;

        第二种方法:调用valueOf()方法 

int number = 100;
String s = String.valueOf(number);

String转int:

        第一种方法:使用Integer的parseInt()方法

String s = "100";
int num = Integer.parseInt(s);

        第二种方法:使用Integer的valueOf()方法

String s = "100";
Integer i = Integer.valueOf(s);
int num = i.intValue();

StringBuilder和StringBuffer

这两个类都可以对字符串进行修改

两者的区别在于: 

        StringBuilder:非线程安全,不同步

        StringBuffer:线程安全,同步

        线程安全指的是在多线程环境中,在调用 StringBuffer 方法时,会对 StringBuffer 对象进行加锁,只有获得锁的线程才能够执行该方法,其他线程则需要等待直到锁被释放。这确保了在任何时候只有一个线程能够修改 StringBuffer 对象,从而避免了多线程环境下的数据竞争和不一致性问题

创建StringBuilder、StringBuffer字符串

StringBuilder str = new StringBuilder();
StringBuffer stf = new StringBuffer();

 方法:大致分为增删改查

1.增
  •   append():将指定的字符串加入到字符序列中
StringBuilder str = new StringBuilder();
str.append("abc");
str.append("def");
System.out.println(str);

输出:abcdef

也可以采用链式编程的方式添加字符

StringBuilder s2 = new StringBuilder();
s2.append("链").append("式").append("编").append("程");
System.out.println(s2);

输出:
链式编程

2.删 
  •  delete(int start,int end):删除指定区域的字符串
  • deleteCharAt():删除指定索引处的字符
StringBuilder s1 = new StringBuilder("abc");
s1.deleteCharAt(0);
System.out.println(s1);

输出:bc
 3.改
  • reverse():反转字符序列
  • toString():将StringBuffer类型的序列转变为String类型的字符串
  • insert(int index,任意类型):将任意类型的字符插入到指定索引中 
StringBuilder str = new StringBuilder("abc");
str.insert(1,"d");
System.out.println(str);

输出:adbc

 

4.查
  • int length():返回字符序列的长度
  • int capacity():返回当前 StringBuilder 对象的容量
  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值