String类

String类

概念: 多个字符组成的字符序列,也可以理解为字符数组。
CharSequence
String, StringBuffer, StringBuilder
public void show(CharSequence seqence);
char charAt(int index) ---------------返回指定索引的 char 值。
int length() ------------------返回此字符序列的长度。
CharSequence subSequence(int start, int end) 返回一个新的 CharSequence,它是此序列的子序列。
String toString() 返回一个包含此序列中字符的字符串,该字符串与此序列的顺序相同。
String的特点:
1.String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
2.字符串是常量;它们的值在创建之后不能更改。
3.所有的常量在内存的方法区的常量池中
4.频繁的字符串拼接操作会导致常量池容器增加,浪费内存资源
5.字符串缓冲区【StringBuffer,StringBuilder】支持可变的字符串
6.Java在编译时期会针对字符串的拼接操作使用StringBuilder改进,提高效率,节约内存资源
s = (new StringBuilder(String.valueOf(s))).append(“efg”).toString();
System.out.println((new StringBuilder(“s:”)).append(s).toString());
7.因为 String 对象是不可变的,所以可以共享
8.字符串本质是字符数组
常量:
字面值常量
"abc"是一个对象
自定义常量
String s = “abc”;

举例代码如下:

public class StringDemo01 {
	public static void main(String[] args) {
		String s = "abc";
		s += "efg";
		System.out.println("s:" + s);
		
		String s2 = "abc";
	}
}

内存图分析:
在这里插入图片描述
String类的构造方法

 public String()
	public String(String original)
	public String(char[] value)
	public String(char[] value, int offset, int count)
	public String(byte[] bytes)
	public String(byte[] bytes, int offset, int length) 

观察字符串源码:

class String {
		private final char value[];
		public String() {
	        this.value = "".value;
	    }
	    
	    public String(String original) {
	        this.value = original.value;
	        this.hash = original.hash;
	    }
	}

String s = "abc"和String s = new String(“abc”);的区别
前者在方法区开辟空间
后者即在方法区,也在堆区开辟空间
一般使用前者创建字符串对象

举例代码如下:

public class StringDemo02 {
	public static void main(String[] args) {
		String s = new String();
		System.out.println("s: " + s);
		
		String s2 = new String("abc");
		System.out.println("s2: " + s2);
		
		s2.intern();
		
		// public String(char[] value)
		String s3 = new String(new char[]{'a', 'b', 'c'});
		System.out.println(s3);
		
		// public String(char[] value, int offset, int count)
		char[] chs = {'a', 'b', 'c', 'd'};
//		String s4 = new String(chs, -1, 2);
		// java.lang.StringIndexOutOfBoundsException
//		System.out.println(s4);
		
		// public String(byte[] bytes)
		String s5 = new String(new byte[] {97,98,99});
		System.out.println(s5);
		
		// public String(byte[] bytes, int offset, int length)
		String s6 = new String(new byte[] {97,98,99}, 0, 3);
		System.out.println(s6);
		
		String ss = "Hello";
		String ss2 = "World";
		String sss = "HelloWorld";
		System.out.println(sss == "Hello" + "World");
		
//		System.out.println(sss == "HelloWorld");
		
	}
}

char charAt(int index) 返回指定索引处的char字符
int indexOf(int ch) 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
int indexOf(String str) 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
int indexOf(int ch,int fromIndex)
返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
int indexOf(String str,int fromIndex)返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
int lastIndexOf(int ch,int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
int lastIndexOf(String str,int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
String substring(int start)返回以索引处开始的字符
String substring(int start,int end)起始索引(包括), 索引从 0 开始。结束索引(不包括)。
int length()返回字符串长度

举例代码如下:

public class StringDemo03 {
	public static void main(String[] args) {
		// 利用多态来创建字符串
		CharSequence sequence = "abc";
		
		String s = "HelloWorldHello";
//		System.out.println("charAt: " + s.charAt(0));
//		System.out.println("charAt: " + s.charAt(1));
		
		// 遍历字符串每一个字符
		for (int i = 0; i < s.length(); i++) {
			System.out.println("charAt: " + s.charAt(i));
		}
		
//		int indexOf(int ch)
//		int ch = 'e';
		System.out.println("indexOf(int ch): " + s.indexOf('l'));
		System.out.println("int indexOf(String str): " + s.indexOf("World"));
		System.out.println("int indexOf(int ch,int fromIndex):" + s.indexOf('o', 5));
		System.out.println("int indexOf(String str,int fromIndex):" + s.indexOf("Hello", 5));
//		int lastIndexOf(int ch)   
		System.out.println("int lastIndexOf(int ch): " + s.lastIndexOf('l'));
//		int lastIndexOf(int ch,int fromIndex) 
		System.out.println("int lastIndexOf(int ch,int fromIndex): " + s.lastIndexOf('l', 10));
//		String substring(int start)
		String str = s.substring(10);
		System.out.println(str);
		String str2 = s.substring(5, 10); // 左闭右开原则
		System.out.println(str2);
		CharSequence subSequence = s.subSequence(5, 10);
		System.out.println(subSequence);
	}
}

boolean isEmpty():判断字符串是否为空。
boolean equals(Object obj):将此字符串的内容与指定的对象比较,区分大小写。
boolean equalsIgnoreCase(String str):将此 String 与另一个 String 比较,忽略大小写。
boolean contains(String str):判断字符串中是否包含方法传入的字符串。
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头。
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾。
public boolean isEmpty() {
return this.value.length == 0;
}
字符串数组如何转换成字符串
char[] chs = {‘a’, ‘b’, ‘c’};
for(int i = 0; i < chs.length; i++){
}
举例代码如下:

public class StringDemo04 {
	public static void main(String[] args) {
		char[] chs = {'a', 'b', 'c'};
		String result = "";
    	for(int i = 0; i < chs.length; i++){
    		result += chs[i];
    	}
		String s = "HelloWorld"; //"" +  H + "" + e + "" + l + "" + l + ..
//		String s = new String("");
//		String s2 = null;
//		String s3 = "";
//		
//		System.out.println(s.isEmpty()); // true
		System.out.println(s2.isEmpty()); // 报错
//		System.out.println(s3.isEmpty()); // true
		
		System.out.println(s.equals("HelloWorld"));
		System.out.println(s.equalsIgnoreCase("helloWorld"));
		System.out.println(s.contains(""));
		String s2 = "http://www.baidu.com";
		String s3 = "HelloWorld.java";
		System.out.println(s2.startsWith("http"));
		System.out.println(s2.startsWith(""));
		System.out.println(s3.endsWith(".java"));
		System.out.println(s3.endsWith(""));
	}
}

byte[] getBytes() :将字符串转化为字节数组。
char[] toCharArray(): 将字符串转化为字符数组。
static String valueOf(char[] chs): 返回 char 数组参数的字符串表示形式。
static String valueOf(int i) :返回 int 参数的字符串表示形式。
String toLowerCase() :将此 String 中的所有字符都转换为小写。
String toUpperCase() :将此 String 中的所有字符都转换为大写。
String concat(String str): 将指定字符串连接到此字符串的结尾。
举例代码如下:

public class StringDemo05 {
	public static void main(String[] args) {
		String s = "HelloWorld";
		byte[] bys = s.getBytes();
		System.out.println(Arrays.toString(bys));
		for (byte b : bys) {
			System.out.println((char)b);
		}
		System.out.println("------------------");
		char[] chs = s.toCharArray();
		for (char c : chs) {
			System.out.println(c);
		}
		System.out.println("-------------------");
		String ss1 = String.valueOf(false);
		System.out.println(ss1);
		String ss2 = String.valueOf(2.5);
		String ss3 = String.valueOf(10);
		System.out.println(ss2 + ss3);
		String ss4 = String.valueOf(new Student());
		System.out.println(ss4);
		System.out.println("-------------------");
		String upperCase = "select * from t_student".toUpperCase();
		System.out.println(upperCase);
		String lowerCase = upperCase.toLowerCase();
		System.out.println(lowerCase);
		System.out.println("-------------------");
		System.out.println("Hello".concat("World"));
	}
}

String replace(char old,char new) :替换功能。
String replace(String old,String new) :替换功能。
String trim():去除字符串两空格。
int compareTo(String str) :按字典顺序比较两个字符串。
int compareToIgnoreCase(String str):按字典顺序比较两个字符串,忽略大小写。
public String[] split(String regex):分隔字符串成字符数组。
举例代码如下:

public class StringDemo06 {
	public static void main(String[] args) {
		String s = "Hello你好World我好Java他也好";
		System.out.println(s.replace('l', 'X'));
		System.out.println(s.replace("Java", "Android"));
		System.out.println(s.replaceAll("[\\u4e00-\\u9fa5]+", "*"));
		
		String s2 = "  Hello  World   ";
		System.out.println(s2.trim() + "===========");
		String s3 = "abcd";
		String s4 = "abcd";
		System.out.println(s3.compareTo(s4)); 
		// 中文比较
		Collator collator = Collator.getInstance(Locale.CHINA);
		int compare = collator.compare("蠢", "贼");
		System.out.println(compare);
		// 这个是后面使用比较器 Comparator的核心方法
		
		// public String[] split(String regex):分隔字符串成字符数组。
		String s5 = "Hello_World_Java";
		String s6 = "Hello32341World32534Java";
		String[] strs = s5.split("_");
		System.out.println(Arrays.toString(strs));
		System.out.println(Arrays.toString(s6.split("\\d")));
		
		// 合并
		CharSequence[] chs = {"Hello", "World", "Java"};
		String join = String.join("+", chs);
		System.out.println(join);
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值