文章精华
ctrl+alt+l格式化代码
Ctrl+b 跟进源码 查看代码的底层代码
Ctrl+alt+t选中代码然后idea会提示用什么去包围
Ctrl+alt+v自动生成左边
ctrl+d自动复制上一行的代码
字符串的遍历在写代码的时候不可以str.fori生成
要用str.length().fori进行生成
****fori是正遍历 反转遍历要用forr
选中遍历用快捷键shift+f6是快捷修改
首先看到方法两个字就要考虑三个问题
第一:我要干嘛?———***
第二:我干这件事需要什么才能完成?——***
第三:我干完了是否要把结果返回?——***
循环的区别:
for循环 知道循环的次数 知道循环的范围去用
while循环知道循环的停止条件的时候去用
目录
***需求:网络中一般传输的数据都是字节数据 我们一般要把这些信息转换成字符串变成我们可以看懂的东西
需求:已知正确的用户名和密码,请用程序实现模拟用户的登录。总共给三次机会登录之后,给出相应的提示。
字符串
我们理解的字符串就是用双引号直接引用的就是字符串
字符串的相加就是拼接
Eg:“love”+“李”=“love李”
字符串在开发中的应用场景:
在登录的时候我们登录的账号密码要与数据库里面的账号密码进行比较
玩游戏的时候发表聊天 有脏话会转换成***
转账的时候数字下面会有汉字的个十百千
String概述:java.lang.String类代表字符串(Java.lang是java的核心包使用的时候不用去导包),Java程序中的所有字符串文字(“李”)都为此类的对象
注意点:字符串的内容不能改,他的对象在创建后不能更改
意思就是两个字符串进行拼接 拼接好的字符串是第三个新的字符串
创建字符串对象的两种方式:
一 :直接赋值
String love=“李”;
二:new
分别是创建空白字符串;根据传入的字符串创建字符串对象;根据字符数组创建字符串对象 ;根据字节数组创建字符串对象
创建空白字符串 (无参构造)
String love2=new String();
system.out.println(love2);
根据传递的一个字符串去创造一个新的字符串(了解一下)
String love3=new String("李");
system.out.println(love3);
根据字符数组的内容去创建一个新的字符串
***需求:
我要修改字符串的内容 把李我想你了 改为 李也想我了
字符串不能做修改 所以可以用数组来修改
char[] chs={'李','我','想','你','了'};
String love4=new String(chs);
System.out.println(love4);
//根据字节数组的内容去创建一个新的字符串对象
***需求:网络中一般传输的数据都是字节数据 我们一般要把这些信息转换成字符串变成我们可以看懂的东西
byte[] bytes={97,98,99};
String love5=new String(love5);
System.out.println(love5);
小细节 :他的运行成果是abc而不是把那些数字进行一个拼接,他首先是先将这些数字与表的数字进行对象转换成abc再进行拼接
字符串在内存中的创建方式:
基本常识:
我们会涉及到的内存有 栈内存(与方法有关)方法运行进栈,运行完出栈
堆内存 new出来的对象都在这里
方法区 当代码要运行的时候字节码文件(class文件)会在这里临时存储
String Table(串池) 直接赋值的字符串在这里 new出来的不在
**当使用双引号直接赋值,系统会检查串池里面有没有存在就复用 不存在就创建一个新的字符串(节省空间)
**手动new的字符串 每次new都会在堆内存里面开辟一个新的空间(浪费空间)这些的字符串地址不同
字符串的比较
==号比较的是什么???
基本数据类型则比较的是数据值
引用数据类型比较的是地址值
字符串的比较之内容
eg://这种就是直接赋值 在串池里面有一样的会复用 所以他们地址值相同 所以相等
String s1="abc";
String s2="abc";
System.out.println(s1==s2);
//
String s1=new String("abc");
String s2="abc";
System.out.println(s1==s2);
第一个是new的字符串会在堆内存里面开辟一个新的地址 s2的话是记录串池里面的地址两者地址不同 所以false
字符串的比较之内容
一 boolean equals() 完全一样是true
二 Boolean equalslgnoreCase() 忽略大小写的比较(比如验证码的输入忽略大小写)
开撸!
String s1=new String("abc");
String s2="abc";
//比较字符串里面的内容(大小写区分)
boolean result1=s1.equals(s2);
System.out.println(result);
//大小写不区分忽略大小写
boolean result2=s1.equalsIgnoreCase(s2);
System.out.println(result2);
//忽略大小写 只能是英文大小写 一 壹 1 这种不可以哈
字符串练习——用户登录
当键盘录入一个abc和代码中定义一个字符串abc相同吗??
答案是false
because:键盘录入的字符串是new出来的
//结论:
//以后想要去比较字符串的内容 就要用String的方法 squals squalsIgnoreCase
需求:已知正确的用户名和密码,请用程序实现模拟用户的登录。总共给三次机会登录之后,给出相应的提示。
代码展示
import java.util.Scanner;
public class StringDemo4 {
public static void main(String[] args) {
String rightUsername ="zhangsan";
String rightPassword ="123456";
Scanner sc =new Scanner(System.in);
for (int i=0;i<3;i++){
System.out.println("请输入您的用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String Password = sc.next();
if(username.equals(rightUsername)&&Password.equals(rightPassword)){
System.out.println("用户登录成功");
break; }
else{if(i==2){
System.out.println("账号"+username+"被锁定,请联系李");
}
System.out.println("失败,您还剩下"+(2-i)+"次机会");
}
}}
}
代码思路:
首先先把正确的用户账号密码先写出来
String rightusername=“”; String rightpassword=“”
然后去键盘录入 scanner sc=new scanner(system.in);
sout(“输入您的用户名”)
用username去接收用户的录入
String username=sc.next();
密码同理
接着比较录入和right去比较
username.equals(rightUsername)&&Password.equals(rightPassword)
但是需求要求三次 咱们就用循环去包裹
那用哪个循环呢
循环的区别:
for循环 知道循环的次数 知道循环的范围去用
while循环知道循环的停止条件的时候去用
字符串练习——遍历字符串
案例:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
基本常识:Public char charAt(int index):根据索引返回字符
eg:“李华杰这么费劲吧”索引分别是0 1 2 3 4 5 6 7
public int length():返回此字符串的长度
数组长度:数组名.length不加小括号
字符串的长度:字符串对象.length()加小括号
eg:“李华杰这么费劲吧” 长度为8
代码思路:
首先代码录入scanner sc=new scanner(system.in)
sc.next();用Ctrl+alt+v自动生成左边 用str去接收
然后去遍历 这边遍历的话要用str.length()fori去生成
再用charAt方法去挨个遍历
代码展示
import java.util.Scanner;
public class StringDemo5 {
public static void main(String[] args) {
//键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
//进行遍历
for (int i = 0; i < str.length(); i++) {
//i依次表示字符串的每一个索引
char c = str.charAt(i);
System.out.println(c);
}
}
}
案例:统计字符次数
键盘录入一个字符串 统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数
代码思路
首先代码录入scanner sc=new scanner(system.in)
sc.next();用Ctrl+alt+v自动生成左边 用str去接收
一旦看到统计两个字就想到计数器思想
计数器思想定义一个变量 在合适的时候让他自增++
因为有三情况所以定义三个计数器
接着遍历str.length().fori
在for循环中使用charAt进行挨个遍历
在for循环中进行大小写比较
//****char类型的变量在参与计算的时候自动类型提升为int 查询ascii表**
所以if中可以使用(c>='a'&&c<="zz")
这边注意if在比较数字的时候
if(c>='0'&&c<='9')要用单引号去括起来因为在ASCII表中数字0和9代表的特殊的字符
而字符0和字符9分别代表48....
所以在if中不加引号的话会用特殊的符号去比较 不是咱们想要的一个效果
咱们想要的是看数字在不在字符0和字符九之间 所以要加上引号
这是我找到的ascii表
代码部分
import java.util.Scanner;
public class StringDemo6 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("输入一个字符串:");
String str = sc.next();
//定义计数器
int bigCount=0;
int smalllCount=0;
int numberCount=0;
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
if(c>='a'&&c<='z'){
smalllCount++;
}
else if(c>='A'&&c<='Z'){
bigCount++;
}
else if(c>='0'&&c<='9'){
numberCount++;
} }
//循环结束之后输出
System.out.println("小写字母有:"+smalllCount+"个");
System.out.println("大写字母有:"+bigCount+"个");
System.out.println("数字字母有:"+numberCount+"个");
}
}
案例:拼接字符串
定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
eg:数组为int【】 arr={1,2,3};
执行方法后的输出结果为:【1,2,3】
代码思路:
首先先想三个问题
第一:我要干嘛?———遍历数组并把数组拼接成一个字符串
第二:我干这件事需要什么才能完成?——数组
第三:我干完了是否要把结果返回?——返回一个拼接后的字符串
//如果调用处需要继续去使用,那么必须返回
//如果调用出不需要继续去使用,那么可以返回,也可以不用去返回
案例中要返回
public static String arrToString(int[] arr)使用一个int的形参
首先先进行一个安全校验 第一种情况是arr=null 咱们直接给返回一个空字符串“”
第二种情况是数组的长度为0 也就是 在刚开始的时候他有这样的代码
int [] arr=new int[0];
这种情况数组的长度为0返回一个“【】”
当进行安全检验完的话就开始arr.fori
要注意i代表的是索引 arr[i]才代表的是元素
代码实现
public class StringDemo7 {
public static void main(String[] args) {
int[] arr ={1,2,3};
String str=arrToString(arr);
System.out.println(str);
}
public static String arrToString(int[] arr) {
if(arr==null){
return "";
}
if (arr.length==0){
return"[]";
}
String result="[";
for (int i = 0; i < arr.length; i++) {
if (i==arr.length-1){
result=result+arr[i];
}else{
result=result+arr[i]+", ";}
}
result=result+"]";
return result;
}
}
案列:字符串反转
定义一个方法,实现字符串反转 键盘录入一个字符串,调用该方法后,在控制台输出结果
eg:键盘录入abc,输出结果cba
首先看到方法两个字就要考虑三个问题
第一:我要干嘛?———字符串的反转
第二:我干这件事需要什么才能完成?——需要一个字符串
第三:我干完了是否要把结果返回?——需要结果进行输出
代码思路:首先自己先定义一个方法
public static String reverser(String str){}
****fori是正遍历 反转遍历要用forr
其中遍历的时候因为是从最大开始遍历所以
for (int i = str.length()-1; i >=0; i--)要减一 并且最小是0要大于且等于0
这里用charAt的话 反转的字符是散的 要定义一个字符串 然后加起来
所以在方法下面先定义一个String result ="";空字符串
代码展示
public class StringDemo8 {
public static void main(String[] args) {
String result =reverser("abc");
System.out.println(result);
}
public static String reverser(String str){
String result ="";
for (int i = str.length()-1; i >=0; i--) {
char c=str.charAt(i);
result=result+c;
}
return result;
}
}