Java学习----String的操作

本文详细介绍了Java中String类的常用方法,包括length、substring、charAt、indexOf、equals、split以及intern方法。讨论了字符串转数字和数字转字符串的方法,如Integer.parseInt和Double.parseDouble。此外,还提到了字符串新特性如repeat、lines、strip系列方法,以及String的内部实现原理,从JDK1.8前的char[]到现在的byte[]优化。最后,给出了两个习题,涉及回文数的查找和根据数字输出对应星期名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日学习内容:

常见方法

length()
substring(int)/(int,int)
charAt(int index):char
indexOf(int ch) 和 indexOf(int ch, int fromIndex) 方法
equals(String):boolean比较两个字符串的内容是否相等

split(String regex)

考试常见方法:intern() 方法

String s1="ab"+"c";
String s2="abc";
System.out.println(s1==s2); //true

字符串常量拼接,在方法区的常量池中完成

String s0="ab";
String s1=s0+"c";
String s2="abc";
System.out.println(s1==s2); //false

String类型的拼接是通过StringBuilder类中的append方法实现的,然后返回toString的结果。是在堆中的新对象

字符串转数字

使用Scanner读取键盘录入数据

next():String 当光标扫描到第一个分隔符(默认是空格)停止扫描,会创建一个String类的对象,
里面存储的就是扫描的内容(不包含空格分隔符)返回创建的String对象的引用给n

Scanner cin=new Scanner(System.in);
while (true) {
String n = cin.next();
if("exit".equals(n))
break;
System.out.println(n + 'A');
}
cin.close();

nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入
后,nextLine()将光标定位在下一行。所以它和next()的区别就是它没有分隔符,直接扫描全部的键
盘输入内容,并创建对象进行将其引用返回

目标类型名.parse类型(String)
Integer.parsetInt(String):int
Double.parsetDouble(String):double

数字转字符串

""+任意类型数据

字符串新方法

String.repeat(int) 根据 int 参数的值重复 String
String.lines() 拆分由其行终止符在其上调用的 String ,并返回由这些行终止符划分的
Strings Stream 。具体使用以后再说
String.strip() 、 String.stripLeading() 和 String.stripTrailing() 去除字符串的空格
String.isBlank() 判断String是否为空或仅包含空格字符

具体实现原理

在JDK1.8以前采用char[]实现,现在采用byte[]的方式实现。可以减少字符串占用的内存,同时减少垃圾
回收次数。
实际开发中单字节的字符使用频率远高于双字节的。在JDK8+版本中Java会根据字符串内容自动设置为
相应的编码,要么 Latin-1要么UTF16,中文是两个字节,纯英文是一个字节。
不使用UTF-8编码字符集是因为UTF-8是变长编码的,有1、2、3、4字节的不同情况,所以对于String随
机访问操作很不方便
UTF-16也是变长编码,是使用2或者4个字节存储字符。对于Unicode编码在0-FFFF之间的字符使用两个
字节存储,而10000-10FFFF之间的字符使用4个字节。但是Java中一个char就是2个字节,同时String的
各种操作都是以Java字符为单位的,所以UTF-16在Java中可以看作一个定长的编码

习题练习

1、打印5位数中的所有回文数,每行打印10个数。最后统计一下一共有多少个5位回文数。

//1、打印5位数中的所有回文数,每行打印10个数。最后统计一下一共有多少个5位回文数。
//注:回文数即正反读都是一个数,5位数的话,只要个位与万位相同,十位与千位相同就是一个回
//文数。
public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int cc = 0;
		for(int k = 10000;k < 100000;k++) {
			String ss = "" + k;
		String s1 = "";
		for(int i = ss.length()-1;i >= 0;i--) {
			s1 += ss.charAt(i);
		}
		if(ss.equals(s1)) {
			System.out.print(k+"\t");
			cc++;
			if(cc%10 == 0) {
				System.out.println();
			}
		}
		}
		System.out.println("共有"+cc+"个五位回文数");
	}

}

2、根据键盘录入的数值1、2、3、4,...7输出对应的星期一、星期二、星期三...星期日

//2、根据键盘录入的数值1、2、3、4,...7输出对应的星期一、星期二、星期三...星期日
import java.util.Scanner;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		int k = 1;
		while(true) {
			String ss = sc.nextLine();
			k = Integer.parseInt(ss);
			if(k < 1 || k > 7) {
				System.out.println("您输入的数据不合法!\n请重新输入一个数字:");
			}else break;
		}
		String s1 = "一二三四五六天";
		String s2 = "星期"+s1.charAt(k-1);
		System.out.println(s2);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值