java学习day21---(String类常用方法以及习题)
一、API概念
API就是封装的具体体现,API就是封装之后暴露的使用方式
框架:技术的解决方案
二、String类
字符串有个私有属性:private final char value[]
说明了:
1.字符串是常量,创建之后不能改变
2.使用+符号拼接,每次都是在创建新的字符串
3.字符串是由字符数组组成的
char提升为int,按照序号位置提升
编码:将文字按照编码集转为字节表示
解码:将字节按照编码值转为文字显示
utf-8收集了世界上所有的文字,用三个字节表示汉字
getBytes()编码方法
String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
String(byte[])解码方法
String(byte[] bytes, String charsetName) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
哪张编码集编码就用哪张解码,不然就会乱码
三、字符串常量池
概念:为了减少内存开销,让字符串对象得到复用
字符串常量池在方法区中
“ ”引用的字符会放到常量池中,+拼接的也会放到常量池中
字符变量+""放在堆中,字符变量+字符变量放在堆中
String.nextLine()支持空格
四、习题
第一题:
在登录注册页面中,除了用户名和密码外,通常也会包含验证码。
验证码是用来区分用户是计算机还是人,防止恶意破解密码、刷票、灌水等行为。
在判断验证码时一般不区分大小写。
请编写程序模拟验证码的判断过程,如果输入正确,给出提示,结束程序。
如果输入错误,给出提示,验证码刷新,重新输入,直至正确为止。
public static void main(String[] args) { while(true) { String verficaton = getVerficationCode(); System.out.println("验证码为:" + verficaton); Scanner sr = new Scanner(System.in); System.out.println("请输入验证码:"); String user = sr.next(); if (user.equalsIgnoreCase(verficaton)) { System.out.println("验证成功!"); break; } System.out.println("验证失败,重新验证!"); System.out.println("------------------"); } } //生成4位验证码,范围是数字、字母大小写 public static String getVerficationCode(){ Random sc=new Random(); String code=""; for (int i = 0; i < 4; i++) { int num=sc.nextInt(128); char c; if(('a'<=num&&num<='z')||('A'<=num&&num<='Z')||('0'<=num&&num<='9')){ c=(char)num; code+=c; }else { i--; } } return code; }
第二题:
现有如下文本:"Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的"。
请编写程序,统计该文本中"Java"一词出现的次数。
public static void main(String[] args) { String str="Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的"; int cout=getNmuberTimes(str,"Java"); System.out.println(cout); } //计算一个字符串在另一个字符串里出现的次数 public static int getNmuberTimes(String str,String str1){ int cout=0; //计数变量 int start=str1.charAt(0); // 要查找字符串的首个字符的序号 int sum=0; //序号总和 for(int i=0;i<str1.length();i++){ //计算要查找的字符串在utf-8中的序号总和 sum+=str1.charAt(i); } for(int i=0;i<str.length();i++){ //遍历整个字符串 int num=0; if(start ==str.charAt(i)){ //第i个字符和查找字符串的首个字符相等 for(int j=0;j<str1.length();j++){ //向后循环查找字符串的长度 num+=str.charAt(i+j); } if(num==sum){ //如果两个数的总和相等,就证明有一次 cout++; } } } return cout; }

浙公网安备 33010602011771号