一、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.next()不支持空格,遇到空格就停止录入
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;
}