(java) String类:String的构造方法、字符串的常见方法、StringBuffer和StringBuilder、正则表达式

protected Object clone()

标记接口:没有任何抽象方法的接口称为标记接口。

CloneNotSupportedException

异常名称:克隆不支持异常

产生原因:需要克隆的对象没有实现Cloneable接口

Student s1=new Student(“老王”,40);

Student s2=s1;——多个引用指向同一个堆区空间

Object s1clone=s1.clone();——在堆区复制一个对象,会创建一个新的堆区空间。

protected void finalize()

当垃圾回收器确定对象成为垃圾对象时,由对象的垃圾回收器调用此方法,用于垃圾回收,但是什么时候回收不确定。

Student s=new Student(“老王”,40);

s.finalize();

String类 【精通】

一:string类的概述:字符串的本质就是字符数组,也称为字符序列。

二:字符串常量在方法区的常量池开辟空间。

三:string常量创建后,地址是不可变的,但内容可以共享。

String str = “hello”;<!----此时在常量池开辟一个空间存储“hello”>

str += “world”;<!----此时会在常量池开辟一个新的空间存储"helloworld",而不会覆盖掉原来的空间>

System.out.println(str);<!----此时指向的是新空间,旧连接断掉。>

String s1 ="aaa";
String s2 ="bbb";
String S3 ="aaabbb";
String s4 =s1+s2;
System.out.println(s3 == s4); // false

String s = new String("abc");   
String s1 = "abc";   
String s2 = new String("abc");   
System.out.println(s == s1); // false  
System.out.println(s == s2); // false  
System.out.println(s1 == s2); // false

String hello = "hello";   
String hel = "hel";   
String lo = "lo";   
System.out.println(hello == "hel" + "lo"); // true   
System.out.println(hello == "hel" + lo); // false

在这里插入图片描述

String的构造方法

public String()

public String(String original)

public String(char[] value)<!----将字符数组转换成字符串>

public String(char[] value, int index, int count)<!----将一部分字符数组转成字符串(index开始位置,count长度)>

public String(byte[] bytes)<!----将字节数组转换成字符串>

public String(byte[] bytes, int offset, int length)<!----将一部分字节数组转换成字符串(offset开始位置,length长度)>

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("s: " + s2);
		
		// 重点: 将字符数组转换成字符串 
		String s3 = new String(new char[] {'a','b','c'});
		System.out.println("s: " + s3);
		
		// 重点: 将字符数组的一部分转换成字符串 
		char[] chs = {'H', 'e', 'l', 'l', 'o'};
		String s4 = new String(chs, 2, 3);
		System.out.println("s: " + s4);
		
		// 重点: 将字字节数组的一部分转换成字符串 
		byte[] bys = {97,98,99,100};
		String s5 = new String(bys);
		System.out.println("s: " + s5);
	}
}

字符串的常见方法(一)

char charAt(int index)

int indexOf(int ch)

int indexOf(String str)

int indexOf(int ch, int fromIndex)<!----int ch要查找的字符, fromindex开始查找的位置>

int indexof(String str, int fromIndex)<!----str要查找的字符串>

int lastIndexof(int ch)<!----从右往左找>

int lastIndexOf(int ch, int fromIndex)

int lastindexof(String str, int fromIndex)

String substring(int start)<!----截取字符串,从start位置开始截取到末尾>

String substring(int start, int end)<!----截取字符串,从start开始截取到end>

int length()

public class StringDemo03 {
	public static void main(String[] args) {
		String s = "HelloWorldJavaWorld";
		
		System.out.println("length: " + s.length());
		
		// 获取字符串某个索引对应的字符 char charAt(int index) 
		for (int i = 0; i < s.length(); i++) {
			char ch = s.charAt(i);
			System.out.println(ch);
		}
		
		// 通过某个字符返回该字符在字符串中的索引: int indexOf(int ch) 
		System.out.println(s.indexOf('H'));
		
		// 通过某个字符串返回该字符串在源字符串中的索引: int indexOf(String str) 
		System.out.println(s.indexOf("World"));
		
		// 从fromIndex位置开始从左往右搜索, 第一次出现字符ch的索引
		// int indexOf(int ch,int fromIndex) 
		System.out.println(s.indexOf('l', 4));
		
		// int indexOf(String str,int fromIndex)
		System.out.println(s.indexOf("World", 9));
		
		// int lastIndexOf(String str,int fromIndex) 
		// fromIndex开始从右边往左边搜索,第一次出现字符串str的索引
		System.out.println(s.lastIndexOf("World", 10));
		
		// String substring(int start) 截取字符串 从start开始截取到末尾
		System.out.println(s.substring(s.lastIndexOf("World", s.length())));
		
		// "HelloWorldJavaWorld"
		System.out.println(s.substring(s.indexOf('J'), s.lastIndexOf('W')));
	}
}

字符串的常见方法(二)

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 class StringDemo04 {
	public static void main(String[] args) {
		String s = "HelloWorldAndroid";
		
		// System.out.println(s.isEmpty());
		
		// String s1 = "";
		// String s2 = new String("");
		// String s3 = null;
		//
		// System.out.println(s1.isEmpty()); // true
		// System.out.println(s2.isEmpty()); // true
		// System.out.println(s3.isEmpty()); // false
		
		System.out.println("Hello".equalsIgnoreCase("HELLO"));
		// "" + H + "" + e + "" + l + "" + l + "" + o + ""
		System.out.println("Hello".contains(""));
		System.out.println("http://www.baidu.com".startsWith("http://"));
		System.out.println("HelloWorld.java".endsWith(".java"));
		
		System.out.println(s.startsWith(""));
		System.out.println(s.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): 将指定字符串连接到此字符串的结尾。

重点的四个方法:【IO流 字符流 字节流】

​ 将字符数组转换成字符串

​ 将字节数组转换成字符串

​ 将字符串转换成字节数组

​ 将字符串转换成字符数组

public class StringDemo05 {
	public static void main(String[] args) {
		String s = "HelloWorld";
		byte[] bys = s.getBytes();
		System.out.println(Arrays.toString(bys));
		
		char[] chs = s.toCharArray();
		System.out.println(Arrays.toString(chs));
		
		String s2 = String.valueOf(false);
		System.out.println(s2);
		
		System.out.println(String.valueOf(10));
		
		// System.out.println(10.0 + "");
		System.out.println(String.valueOf(new Object()));
		
		System.out.println(s.toLowerCase());
		
		// 后期在写sql语句的时候,数据库会将所有的sql语句转换为大写
		System.out.println(s.toUpperCase());
		
		System.out.println(s.concat("Android"));
	}
}

字符串的常见方法(四)

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 = "HelloWorld";
		
		System.out.println(s.replace("Hello", "good"));
		System.out.println(s.replace('H', 'K'));
		
		String s2 = "	 Great     World    ";
		System.out.println(s2.trim() + "============");
		
		// int compareTo(String str)
		/*
		 * 该方法是后面用来比较任意两个对象的一个方法,这个方法来自于 Comparable接口
		 * 返回的整数是一个int类型
		 * 后期我们会详细讲解为什么返回int类型
		 * 
		 * 正数: 表示大于
		 * 0: 表示相等
		 * 负数: 表示小于
		 * s3.compareTo(s4)
		 * 后期学习集合的时候有大用处
		 * 							"abce"
		 * public int compareTo(String anotherString) {
		        int len1 = this.value.length; "abcd" 4
		        int len2 = anotherString.value.length; 4
		        int lim = Math.min(len1, len2); 4
		        char v1[] = this.value;  "abcd"
		        char v2[] = anotherString.value; "abcd"
		
		        int k = 0;
		        while (k < lim) {
		            char c1 = v1[k];
		            char c2 = v2[k];
		            if (c1 != c2) {
		                return c1 - c2;
		            }
		            k++;
		        }
		        return len1 - len2;
		    }
		 */
		String s3 = "abcd";
		String s4 = "abce";
		System.out.println(s3.compareTo(s4));
		System.out.println(s4.compareTo(s3));
		System.out.println(s3.compareTo(s3));
		
		// 我们无需实现中文的比较,系统针对文本提供了相应的工具类
		Collator c = Collator.getInstance(Locale.CHINESE);
		int cmp = c.compare("李四", "李四");
		System.out.println(cmp);
		
		System.out.println("HelloWorld".compareToIgnoreCase("HELLOWORLD"));
		
		String s5 = "Hello=World=Java";
		String[] strs = s5.split("=");
		System.out.println(Arrays.toString(strs));
	}
}

字符串的常见方法(五)

字符串中的其他方法:

static String format(Locale l, String format, Object… args)

static String format(String format, Object… args)

Object… 的本质是 Object[] args %n %d %s %c %b %f

static String join(CharSequence delimiter, CharSequence… elements) <!----delimiter(分隔符,分界符)>

当一个方法的形参希望我们传入的是CharSequence接口的时候,实际希望我们传入的是接口的实现类。

当一个方法希望传入的是CharSequence… elements的时候,本质是一个数组 CharSequence[];

这个数组的每一个元素是CharSequence类型,每一个元素也可以是CharSequence的实现类

public class StringDemo07 {
	public static void main(String[] args) {
		Object[] arguments = {"张三", 18, "打篮球"};
		String formatStr = String.format("大家好我叫做%s,我今年%d,我的兴趣爱好是%s", arguments);
		System.out.println(formatStr);
		
		String join = String.join("+", "Hello","World","Java");
		System.out.println(join);
	}
}

StringBuffer和StringBuilder

StringBuffer 和SringBuilder 和String的区别:

String每次拼接字符串都会在方法区的常量池中开启新的空间。

而StringBuffer 和SringBuilder的增删改则会在原来创建的空间上更新替换。

增:

StringBuffer append (String str)

StringBuffer insert (int offset, String str) <!----在位置(offset)前面插入字符串(str)>

删:

StringBuffer deleteCharAt(int index)<!----删除index位置的字符>

StringBuffer delete (int start, int end);<!----左闭右开>

改:

public StringBuffer replace (int start, int end, String str)

其他功能:

public StringBuffer reverse()<!----倒置>

public String substring (int start)

public String substring (int start, int end)

public class StringBuilderDemo02 {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("Hello");
		System.out.println(sb); // Hello

		StringBuffer sb2 = sb.append("World");
		System.out.println("sb:" + sb); // HelloWorld
		System.out.println("sb2:" + sb2); // HelloWorld

		sb.append(false).append('c').append(2.5).append(new Object());
		System.out.println(sb);//HelloWorldfalsec2.5java.lang.Object@15db9742

		sb.insert(sb.indexOf("f"), "Java");
		System.out.println(sb);//HelloWorldJavafalsec2.5java.lang.Object@15db9742

		sb.deleteCharAt(sb.indexOf("c"));
		System.out.println(sb);//HelloWorldJavafalse2.5java.lang.Object@15db9742

		sb.delete(sb.indexOf("J"), sb.indexOf("4"));
		System.out.println(sb);//HelloWorld42

		sb.replace(sb.indexOf("4"), sb.length(), "Good");
		System.out.println(sb);//HelloWorldGood

		sb.reverse();
		System.out.println(sb);//dooGdlroWolleH

		sb.reverse();
		System.out.println(sb);//HelloWorldGood
		
//		sb.substring(sb.indexOf("W"));
		System.out.println(sb.substring(sb.indexOf("W")));//HelloWorldGood
		

		System.out.println(isPalindromic(1001));//true(正着读与倒着读是否一样?)
		
	}

	public static boolean isPalindromic(int num) {
		return new StringBuilder(String.valueOf(num)).reverse().toString().equals(String.valueOf(num));
	}
}

正则表达式

字符类:匹配单个字符

a:表示匹配字母a

\\:表示匹配转义字符“\”

\t:匹配转义字符“\t”

\n:匹配转义字符“\n”

注意:java中用\\t表示\t。

范围类:匹配里面的任意一个字符

[abc]:表示可以是a,也可以是b或者是c。

[^abc]:表示不是a,b,c中的任何一个。

[a-zA-Z]:表示全部字母中的任何一个都可以。

[0-9]:表示全部数字中的任何以一个都可以。

预定义类:

.:表示任意的一位字符。

\d:表示任意的一位数字,等价于[0-9]

\D:表示任意的一位非数字,等价于[^0-9]

\w:表示任意的一位字母、数字、_,等价于[a-zA-Z0-9]

\W:表示任意的一位非字母、数字、_,等价于[^a-zA-Z0-9]

\s:表示任意的一位空格,例如“\n”,"\t"等。

\S:表示任意的一位非空格。

边界类:(边界匹配)

^:表示行的开头(一组正则的开始)。

$:表示行的结尾(一组正则的结束)。

\b:表示单词与非单词之间的位置。

​ 注:一般我们都用\b来进行获取,

​ 例如:String str=",呵呵,";
​ String rex="\\b呵呵\\b";

​ 输出结果:呵呵

\B:表示单词与单词之间的位置或者非单词与非单词之间的位置。

​ 注:\B一般也是用来进行获取的

​ 例如:String str=",和呵呵,";
​ String rex="\\B呵\\B";

​ 输出结果:呵

数量类:之前的所有正则都只是表示一位,若想表示多位,则需要数量来表示。

?:表示出现0次或1次。

*:表示出现0次,1次或多次。

+:表示出现1次或多次。

{n}:表示正好出现n次。

{n,}:表示出现n次以上。

{n,m}:表示出现n~m次之间。

逻辑表示:与、或、非

正则表达式A正则表示B:表示表达式A之后紧跟着表达式B。

正则表达式A|正则表达式B:表示表达式A或者表达式B,二者任意一个出现都可以。

(正则表达式):将多个子表达式合成一个表示,作为一组出现。

正则操作类:Pattern(正则模式)和Matcher(匹配)

Pattern类常用方法:
pubic static Pattern compile(String regex)
public Matcher matcher (CharSequence input)
public String[] split( CharSequence input)

注意:
Pattern没有提供构造方法,所以要取得Pattern类实例,则I必须调用compile()方法

Matcher类常用方法

public boolean matches( )
public String replaceAll( String replacement)
public boolean find( )
pubic String group( int group)

public class RegexDemo{
	public static void main(String[] args) {
		String str ="101";
		String regex="\\d+";
		Pattern pat =Pattern.compile(regex);
		Matcher mat =pat.matcher(str);
		System.out.println(mat.matches());
	}
}
运行结果:true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值