String

String

  • String表示字符串类型,属于引用数据类型,不属于基本数据类型
  • 在java中,在“” 内部都是String对象。“qwe” “123” “/////
  • java规定,双引号内部的字符串是不可变的,“asd”从创建到死亡,都是“asd”,不会变成其他的字符串,源代码使用final修饰,垃圾回收器不会释放常量。
  • 在jdk当中,使用双引号括起来的字符串,都是直接存储在方法区字符串常量池当中的
    • 因为字符串在开发中使用太频繁,为了执行效率,所以把字符串放到方法区的字符串常量池当中。——见例一

成员

  • String类拥有四个成员
    • private final char value[];
      private int hash; // Default to 0
      private static final long serialVersionUID = -6849794470754667710L;
      private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];
  • String的本质其实是char[] 字符数组,需要注意的是这个字符数组是final的。final可以修饰类、方法和变量,含义各不相同。当修饰变量的时候意味着该变量一旦被初始化后将不能修改它的值,该变量只能创建和删除,不能修改。
  • String字符串转为char数组—— char[] chars = s.toCharArray(); //s是字符串
  • java.lang.Character.isLetterOrDigit(int codePoint) 确定指定字符(Unicode代码点)是一个字母或数字。
    字符被确定是字母或数字,如果不是isLetter(codePoint) 也不是 isDigit(codePoint) 的字符,则返回true。

例题一

package String;

public class StringTest01 {
	public static void main(String[] args) {
		String s1 ="abcdef";
		String s2="abcdef"+"xy";
		//使用String的构造方法
		//凡是双引号括起来的内容,都在字符串常量池中有一份
		//new对象的时候,一定在堆内存当中开辟了空间
		String s3 = new String( "xy");
		
		//字符串比较不能使用==比较
		String s4 ="hello";
		System.out.println(s4);  		//输出hello  String重写toString方法  本应该输出内存地址
		String s5 ="hello";
		System.out.println(s4==s5);		//引用 判断地址是否相同   //true
		String s6 = new String( "xyz");
		String s7 = new String( "xyz");
		System.out.println(s6==s7);		//false
		System.out.println(s6.equals(s7));  //true
		
//常用的构造方法
		byte[] bytes = {97,98,99};   //97是a ,98是b ,99是c
		String s8=new String(bytes);
		System.out.println(s8);
		
		char[] chars= {'报','君','黄','金','台','上','意'};
		String s9 = new String(chars);
		System.out.println(s9);
		
		//截取部分字符的构造方法
		//(传入的字符串,数组下标的起始位置,截取的字符长度)
		String s10 = new String(bytes,1,2);		//bc
		System.out.println(s10);
		String s11 = new String(chars,2,3);		//黄金台
		System.out.println(s11);
	}
}

在这里插入图片描述

内存图理解

package String;

public class User {
	private String name;
	private int id;
	
	public User() {
		super();
	}
	public User(String name, int id) {
		super();
		this.name = name;
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
}

package String;

public class UserTest {
	public static void main(String[] args) {
		User  user= new User("张三",110);
	}
}

在这里插入图片描述

String常用方法

package Advance.String;

/**
 * @author 衣鱼
 *		String 类中的常用方法
 */
public class StringTest02 {
		public static void main(String[] args) {
	//	char charAt(int index)  返回指定索引处的 char 值。
			char c="happy".charAt(2);			//p
			
	//  int 	compareTo(String anotherString) 按字典顺序比较两个字符串。
					//compareTo不仅可以判断是否相等,还可以判断谁大谁小
			int result1 = "abc".compareTo("abc");		//返回值int类型  等于0
			int result2 = "abdc".compareTo("abec");	//等于-1 小于0		前小后大
					//对于result2来说,前a比较后a,一样之后,前b比较后b,一样之后
					//前d比较后e e大于d  ,不再往后比较
			int result3 = "abce".compareTo("abcd");	//等于1 大于0
			System.out.println("二"+"\t"+result1+"\t"+result2 +"\t"+result3);
			
	//  boolean 	contains(CharSequence s)  将此字符串与指定的 CharSequence 比较。
			System.out.println("三"+"\t"+"helloworld.java".contains("java")); //判断"helloworld.java"是否包含"java"
			
	//boolean 	endsWith(String suffix)		测试此字符串是否以指定的后缀结束。
			System.out.println("四"+"\t"+"test.txt".endsWith(".txt"));
			
	// boolean 	equals(Object anObject)	将此字符串与指定的对象比较。
			System.out.println("五"+"\t"+"abc".equals("abc"));
			
	//  boolean 	equalsIgnoreCase(String anotherString)  将此 String 与另一个 String 比较,不考虑大小写。
			System.out.println("六"+"\t"+"aBC".equalsIgnoreCase("abc"));
			
	//  byte[] 	getBytes()		  使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
			byte[] bytes ="abcdef".getBytes();
			System.out.print("七"+"\t");
			for(int i = 0;i<bytes.length;i++) {
				System.out.print(bytes[i]+"\t");		//97	98	99	100	101	102	
			}
			System.out.println();
			
	//  int 	indexOf(String str)   返回指定子字符串在此字符串中第一次出现处的索引。
			System.out.println("八"+"\t"+"adbyrynuacerban6bc45yana4b".indexOf("an"));
			
	//int 	lastIndexOf(String str, int fromIndex) 
			//返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
			System.out.println("九"+"\t"+"adbyrynuacerban6bc45yana4b".lastIndexOf("an"));
				
	//boolean 	isEmpty()            当且仅当 length() 为 0 时返回 true。
					//判断数组长度,length属性;判断字符串长度length()方法
			System.out.println("十.①"+"\t"+"".isEmpty());
			System.out.println("十.②"+"\t"+"".length());
			System.out.println("十.③"+"\t"+"dfeade".isEmpty());
	
	//String 	replace(CharSequence target, CharSequence replacement)
			// 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
			String s1 ="https://www.dlmu.edu.cn/".replace("https", "http");
			String s2 ="https://www.dlmu.edu.cn/".replace("w", "m");		//可以全部替换
			System.out.println("十一"+"\t"+s1+"\t"+s2);
			
	//String[] 	split(String regex) 	 根据给定正则表达式的匹配拆分此字符串。
			String[] s3 = "2021-07-03".split("-");		//以“-”进行切分
			System.out.print("十二"+"\t");
			for(int i = 0;i<s3.length;i++) {
				System.out.print(s3[i]+"\t");		//
			}
			System.out.println();
			
	//  boolean 	startsWith(String prefix)	测试此字符串是否以指定的前缀开始。
			System.out.println("十三.①"+"\t"+"adbyrynuacerban6bc45yana4b".startsWith("an"));
			System.out.println("十三.②"+"\t"+"adbyrynuacerban6bc45yana4b".startsWith("ad"));
			
	//  String 	substring(int beginIndex)		返回一个新的字符串,它是此字符串的一个子字符串。
			System.out.println("十四.①"+"\t"+"adbyrynuacerban6bc45yana4b".substring(8)); //以下标8返回之后的字符串
	//  String 	substring(int beginIndex, int endIndex)
					//返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。
					//因此,该子字符串的长度为 endIndex-beginIndex。 
			System.out.println("十四.②"+"\t"+"adbyrynuacerban6bc45yana4b".substring(8, 12)); //以[下标8,下标12)范围内的数返回,下标12不返回
			
	//char[] 	toCharArray()  将此字符串转换为一个新的字符数组。
					// "0o0o0o0o0o0"——>[][][][][][][][]
			char[] chars = "0o0o0o0o0o0".toCharArray();
			System.out.print("十五"+"\t");
			for(int i = 0;i<chars.length;i++) {
				System.out.print(chars[i]+"\t");		
			}
			System.out.println();
			
	//String 	toLowerCase()		使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
	//	String 	toUpperCase()	 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
			
	//String 	trim()    返回字符串的副本,忽略前导空白和尾部空白。
			System.out.println("十六"+"\t"+"        hello              world           !           ".trim());
			
	//String 中只有一共静态方法 valueOf()   将非字符串转换成字符串
			String s4 = String.valueOf(2021);
			System.out.println("十七.①"+"\t"+s4);
			String s5 =String.valueOf(new User());		//参数是一个对象的时候,调用的toString方法是谁的
																				//重写toString方法
			System.out.println("十七.②"+"\t"+s5);		//调用的是User类的toString()方法
			//System.out.println(); 方法实际上是把输出的任何数据利用valueOf转化成字符串,再输出
		}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值