java字符串

Java字符串知识点整理(字符串概念、常量池、API、正则表达式)

1.字符概念:

由多个字符(char型)拼接而成的字符序列

2.常量池:

定义一个字符串采用String s=new String(“Hello”);

字符串名s定义在栈当中,而Hello则是定义在堆当中,s通过JVM指向堆中的Hello这个字符串对象。如图所示:
在这里插入图片描述

通常在定义一个字符串时,会先将字符串存放到字符串常量池当中,字符串操作,会先从常量池中搜索是否存在当前的字符串,如果存在则不必再堆中新建一个对象,而将新定义的变量指向常量池中的字符串,这样操作可以节约堆的空间。如果常量池当中不存在,则会先在常量池中存储下,然后在堆当中开辟新的空间存放。

3.关于字符串的常用API
length()

此方法用于返回字符串的长度,要与数组当中的length区别,一个是方法,一个则是属性

trim()

用于移除字符串前后的空格

indexOf(“ ”)

用于返回字符串中对应元素的下标

substring()

用于截取字符串,其中参数是截取范围如substring(0,2)即就是截取区间 [0,2) 左闭右开

charAt()

用于返回对应下标的元素

toCharArray()

将字符串转化为字符数组

toUpperCase() toLowerCase()

前者将小写字符转化为大写,后者则相反

equalsIgnoreCase()

忽略大小写比较,注意比较时是逐位比较

replace()

字符串拼接

4.字符串反转实现:
public void testReverse() {
		String s = "hellox";
		char[] chs = s.toCharArray();

		for (int i = 0; i < chs.length / 2; i++) {
			char c = chs[i];
			chs[i] = chs[chs.length - 1 - i];
			chs[chs.length - 1 - i] = c;
		}
		s = new String(chs);
		System.out.println(s);
	}

这里也可以使用Stringbulider中的reverse()方法

5.正则表达式
1.概念

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

2.字符表示意义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KekiPqtX-1619522244613)(C:\Users\APiJu\AppData\Roaming\Typora\typora-user-images\image-20210427190703662.png)]
在这里插入图片描述

限定符

在这里插入图片描述

特殊符号

[0-9]|[a-z]表示或者,判断单个字符是数字或者字母

进行多个字符判断的时候可以使用()()分割

3.字符串的替换

可以使用正则表达式对字符串中相应的数据进行替换

例如:去除标签标识

public void test4() {
		String str = "<h1>这是测试结果</h1><p>test a</p>";
		String pattern ="(<[a-z]+[0-1]*>)|(</[a-z]+[0-1]*>)";
		str=str.replaceAll(pattern, "");
		System.out.println(str);
		
	}

运行结果:
在这里插入图片描述

另外附上本次练习题:

1.将一个字符串进行反转,例如:”abcd”=>“dcba”。

2… 判定输入的一个字符串是否全为数字,使用两种方式完成。

3… 输入一个由小写字符组成的字符串,统计出每个字符出现的次数

     @Test
	/**
	 * 1.将一个字符串进行反转,例如:”abcd”“dcba”
	 */
	public void test1() {
		String str = "abcd";
		char[] c = str.toCharArray();
		for (int i = 0; i < c.length / 2; i++) {
			char t = c[i];
			c[i] = c[c.length - 1 - i];
			c[c.length - 1 - i] = t;
		}
		String s = new String(c);
		System.out.println(s);
	}



    @Test
	/**
	 * 2. 判定输入的一个字符串是否全为数字,使用两种方式完成。
	 */
	public void test2() {
		String s = "45666123";
		// System.out.println(isNumber1(s));
		System.out.println(isNumber2(s));
	}

	/**
	 * 判断字符串是否全是数字(循环)
	 * 
	 * @param s字符串
	 * @return true则是
	 */
	public boolean isNumber1(String s) {
		boolean f = true;
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) <= '0' || s.charAt(i) >= '9') {
				f = false;
				break;
			}
		}
		return f;
	}

	/**
	 * 判断字符串是否全是数字(正则表达式)
	 * 
	 * @param s字符串
	 * @return true则是
	 */
	public boolean isNumber2(String s) {
		boolean f = false;
		String partten = "[0-9]+";
		if (s.matches(partten)) {
			f = true;
		}
		return f;
	}




	@Test
	/**
	 * 3. 输入一个由小写字符组成的字符串,统计出每个字符出现的次数
	 */
	public void test3() {
		String s = "adafafagdfgdfswioutinmbcnruimxvnxzbxvx";
		char[] a = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm',                          'n', 'o', 'p', 'q', 'r', 's', 't','u', 'v', 'w', 'x', 'y', 'z' };
		int[] count = new int[26];

		for (int i = 0; i < s.length(); i++) {
			char t = s.charAt(i);
			for (int j = 0; j < a.length; j++) {
				if (t == a[j]) {
					count[j]++;
				}
			}
		}
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i] + "出现的次数为:" + count[i]);
		}
	}

优化解法:

public void test() {
		String s = "ajfikcnjiencospeowvnoooooo";
		char[] chs = s.toCharArray();
		int[] a = new int[26];

		for (int i = 0; i < chs.length; i++) {
			char t = chs[i];
			a[t - 'a'] += 1;
		}
		for (int i = 0; i < a.length; i++) {
			System.out.println((char)(i+'a') + "出现的次数:" + a[i]);
		}
		int max=a[0];
		int count=0;
		for(int i=1;i<a.length;i++) {
			if(max<a[i]) {
				count=i;
			}
		}
		System.out.println("出现最高次数的字母:"+(char)(count+'a')+"次数"+a[count]);
	}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值