java String类

字符串String 类

String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:
String str = “abc”;
等效于:
char data[] = {‘a’, ‘b’, ‘c’};
String str = new String(data);
下面给出了一些如何使用字符串的更多示例:
System.out.println(“abc”);
String cde = “cde”;
System.out.println(“abc” + cde);
String c = “abc”.substring(2,3);
String d = cde.substring(1, 2);
String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
(1)String是个final类
(2)String是不可变的字符序列

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0

String对象的字符内容是存储在一个字符数组中的。private意味着外面无法直接获取字符数组,而且String没有提供value的get和set方法,final意味着字符数组的引用不可改变(引用地址不可改变),而且String也没有提供方法来修改value数组某个元素值,因此字符串的字符数组内容也不可变

1.String对象的创建

String str = “hello”;
String s1 = new String(); // 本质上 this.value = new char[0];
String s2 = new String(String original); //this.value = original.value;
String s3 = new String(char[] a); //this.value = Arrays.copyOf(value, value.length);
String s4 = new String(char[] a,int startIndex,int count)
在这里插入图片描述

1.1字符串对象是如何存储的

字符串常量存储在字符串常量池,目的是共享
字符串非常量对象存储在堆中。
在这里插入图片描述

String的拼接

原因:
常量与常量的拼接结果在常量池
只要其中有一个是变量,结果就在堆中
如果拼接的结果调用intern()方法,就在常量池中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.2 String 对象的比较

==比较的是地址。
equals比较的是字符串的内容,重写了Object的equals方法。

1.3 String 类的常用方法

10.2.2 String类的常用方法

1、常用方法系列之一

int length():返回字符串的长度: return value.length;
boolean isEmpty():判断是否是空字符串:return value.length == 0;
String toLowerCase():使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String trim():返回字符串的副本,忽略前导空白和尾部空白。
boolean equals(Object obj):比较字符串的内容
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”

2、String类和字符相关操作

char charAt(int index): 返回某索引处的字符return value[index];
char[] toCharArray():将此字符串转换为一个新的字符数组
String(char[] value):分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
String(char[] value, int offset, int count):分配一个新的 String,它包含取自字符数组参数一个子数组的字符。

3.String类字节与字符串操作方法

编码:把字符–>字节
byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
byte[] getBytes(Charset charset) :使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
byte[] getBytes(String charsetName) :使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
解码:把字节–>字符
String(byte[] bytes) :通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes, Charset charset):通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes, int offset, int length) :通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
String(byte[] bytes, int offset, int length, Charset charset):通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。
String(byte[] bytes, int offset, int length, String charsetName):通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。
String(byte[] bytes, String charsetName):通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。

	public static void main(String[] args)throws Exception {
		String str = "中";
		System.out.println(str.getBytes("ISO8859-1").length);//-128~127
		System.out.println(str.getBytes("GBK").length);
		System.out.println(str.getBytes("UTF-8").length);
		
		System.out.println(new String(str.getBytes("ISO8859-1"),"ISO8859-1"));//乱码,表示不了中文
		System.out.println(new String(str.getBytes("GBK"),"GBK"));
		System.out.println(new String(str.getBytes("UTF-8"),"UTF-8"));
	}
	public static void main(String[] args)throws Exception {
		String str = "中";
		byte[] bytes = str.getBytes("GBK");//2个字节   客户端编码
		String string = new String(bytes,"ISO8859-1");//尝试转成2个字符,错    tomcat服务器6默认尝试用ISO8859-1解码
         //在servlet中用代码处理
		byte[] bytes2 = string.getBytes("ISO8859-1");//重新变回2个字节     再次用ISO8859-1编码
		String string2 = new String(bytes2,"GBK");//再变成1个字      再次用GBK解码
		System.out.println(string2);
	}
	public static void main(String[] args)throws Exception {
		String str = "中";
		byte[] bytes = str.getBytes("GBK");//2个字节     浏览器客户端编码
		String string = new String(bytes,"UTF-8");//尝试转成2个字符,错    好比tomcat服务器8默认尝试用UTF-8解码
		System.out.println("string = " + string);//乱码
		
		//在servlet中用Java代码处理
		byte[] bytes2 = string.getBytes("UTF-8");//重新解码变成6个字节     再次用UTF-8编码
		String string2 = new String(bytes2,"GBK");//尝试变成3个字      再次用GBK解码
		System.out.println(string2);//乱码
	}

4、String类判断是否以指定内容开头或结尾

boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。 boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。
boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

5、String类字符串查找操作

boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true。
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex):返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
indexOf和lastIndexOf方法如果未找到都是返回-1

6、String类字符串截取操作

String substring(int beginIndex)
返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值