Java的String类 Li.033

Scanner hasNext() 表示判断下一个输入项是否是字符串, hasNextInt() 表示判断下一个输入项是否是int, 否则返回false next()获取输入项的字符串, nextInt 获取项输入的int import java.util.Scanner; public class Demo1_Scanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); if( scanner.hasNextInt()) { int p = scanner.nextInt(); System.out.println(p); } else { System.out.println("输入内容不是int 数字"); } scanner.close(); } } 输入1个整数, 1个数字串, 输出数字和字符串, 错误示例 import java.util.Scanner; public class Demo2_Scanner { public static void main(String[] args) { // 输入1个整数, 1个字符串的 错误示例 Scanner sc = new Scanner(System.in); int i = sc.nextInt(); String s = sc.nextLine(); System.out.println(i+" "+s); } } 输入1个整数, 1个数字串, 输出数字和字符串, 正确示例, 都当成一行字符串, 后期String转成int类型 import java.util.Scanner; import java.lang.Integer;; public class Demo2_Scanner { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s1 = sc.nextLine(); int i = Integer.parseInt(s1); String s2 = sc.nextLine(); System.out.println(s1+ s2); } } String 类 toString()方法, 没重写前显示包和类名@hashcode() 常量池的string, 没有则创建, 有则使用现有的string 使用new String()则会创建常量的副本 public class Demo2_String { public static void main(String[] args) { String s1 = new String("abc"); String s2 = "abc"; System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } } //结果 false ture 使用+号连接的, 是在StringBuffer中连接后, 再把地址指给变量 public class Demo2_String { public static void main(String[] args) { String s4 = "ab"; String s5 = s4 + "c"; System.out.println(s4 == s5); } } // false String 其他方法 startWith endWith equalsIgnoreCase contains public class Demo3_String { public static void main(String[] args) { String sm = "123 sdf z"; String s1 = "123"; String s2 = "z"; String s3 = "123 SDF z"; String s4 = "sdf"; String s5 = "sDf"; System.out.println(sm.startsWith(s1)); System.out.println(sm.endsWith(s2)); System.out.println(sm.equalsIgnoreCase(s3)); System.out.println(sm.contains(s4)); System.out.println(sm.contains(s5)); System.out.println(sm.toLowerCase().contains(s4.toLowerCase())); } } // T T T T F T String练习, 模拟用户登录 import java.util.Scanner; public class Demo4_String { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = ""; String passwd = ""; for(int i=0;i<3;i++){ System.out.println("请输入用户名:"); if( sc.hasNextLine() ){ name = sc.nextLine(); } System.out.println("请输入用户密码:"); if( sc.hasNextLine() ){ passwd = sc.nextLine(); } if( "admin".equals(name) && "admin".equals(passwd) ){ System.out.println("欢迎"+ name + "登录!"); break; } else { if( (2-i)==0 ){ System.out.println("请找回密码, 或过1小时后再重试 !"); } else{ System.out.println("用户名或密码错误, 您还有" + (2-i) + "次机会!"); } } name = ""; passwd = ""; } sc.close(); } } String 的方法 char charAt(int index) 获取指定索引位置的字符 int length() 获取字符串长度 int indexOf(int ch) 获取字母在字符串第一次出现的索引 int indexOf(String str) 获取字符串第一次出现的出现的索引位置 int indexOf( int ch, int fromIndex ) 从指定索引位置向后, 字母ch 第一次出现的索引位置 int indexOf( String str, int fromInex ) 从指定索引位置向后, str 第一次出现的索引位置 int lastIndexOf(int ch) 最后一次出现字符的索引, 即从后向前找第1次出现字母的索引 int lastIndexOf(int ch, int fromIndex) 从指定索引向前找, 字素ch 出现的索引 int lastIndexOf(String str) int lastIndexOf(String str, int fromIndex) String substring(int beginIndex) 从索引位置开始到结尾截取字符串 String substring(int beginIndex, int endIndex) 从开始索引 到 结束索引位置前(结束索引不包含) 截取字符串 public class Demo5_String { public static void main(String[] args) { String sm = "Hello Wrold!"; System.out.println(sm.charAt(0)); //System.out.println(sm.charAt(20)); System.out.println(sm.length()); System.out.println(sm.indexOf('l')); System.out.println(sm.indexOf('z')); System.out.println(sm.indexOf("Wrold")); System.out.println(sm.indexOf("Wrood")); System.out.println(sm.indexOf('o',5)); System.out.println( sm.indexOf( "old", 5 ) ); } } public class Demo6_String { public static void main(String[] args) { String s = "ET drive UFO! So COOL"; System.out.println(s.lastIndexOf('O')); System.out.println(s.lastIndexOf('O',17)); System.out.println(s.lastIndexOf("UFO")); System.out.println(s.lastIndexOf("So", 9)); } } public class Demo7_String { public static void main(String[] args) { String s = "PhpIsBest?"; System.out.println(s.substring(3)); System.out.println(s.substring(0,3)); } } String 练习, 统计大写, 小写, 数字, 其他字符个数 public class Demo9_String { public static void main(String[] args) { String s = "C C++ C# Go Java Javascript Php Swift 2021"; int sumUp = 0; int sumLow = 0; int sumNu = 0; int sumOther = 0; for(int i=0;i<s.length();i++){ char tmpChar = s.charAt(i); if( tmpChar <= 'z' && tmpChar >= 'a'){ sumLow++; } else if( tmpChar <= 'Z' && tmpChar >= 'A' ){ sumUp++; } else if( tmpChar <= '9' && tmpChar >= '0' ){ sumNu++; } else if( ' ' == tmpChar ){ } else { sumOther++; } } System.out.println(sumUp+"," + sumLow + "," + sumNu + "," + sumOther); } } String 的方法 byte[] getBytes() 字符串转换为字节数组 char[] toCharArray() 字符串转换为字符数线 String valueOf(char[] data) 字符数组转化为字符串 String valueOf(int i) 把 int 转换为字符串, (valueOf 可以任意类型的数据转化为字符串) String toLowerCase() 字符串转换成小写 String toUpperCase() 字符串转换大写 concat(String str) 字符串拼接 public class Demo10_String { public static void main(String[] args) { String s = "Hello"; byte [] b = s.getBytes(); for(int i=0;i<b.length;i++){ System.out.print(b[i]+" "); } System.out.println(); char[] c = s.toCharArray(); for(int i=0;i<c.length;i++){ System.out.print(c[i] + " "); } System.out.println(); String s2 = String.valueOf(c); System.out.println(s2); String s3 = String.valueOf(10); System.out.println(s3); System.out.println(s.toLowerCase()); System.out.println(s.toUpperCase()); System.out.println(s.concat(" Wrold!")); } } String 练习, 首字母大写, 其他小写 public class Demo11_String { // 字符串首写字母大写, 其他字母小写 public static void main(String[] args) { String s = "what Is A Youth?"; if(s.length() > 0){ System.out.println(s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase()); } } } String 练习, int [] arr = {1,2,3}; 转换成指定格式 {1, 2, 3}的字符串. public class Demo12_String { // int [] arr = {1,2,3}; 转换成指定格式 {1, 2, 3}的字符串. public static void main(String[] args) { int [] arr = {1,2,3,4,5}; String s = ""; if( 1 == arr.length ){ s = "{"+ arr[0]+"}"; } if( arr.length > 1 ){ for (int i=0; i<arr.length; i++) { if ( 0 == i ){ s = "{" + arr[i] + ", "; } else if( i < arr.length - 1 ){ s = s + arr[i] + ", "; } else if( i == arr.length-1 ){ s = s + arr[i] + "}"; } } } System.out.println(s); } } String 中的方法 String replace(char oldChar, char newChar) 用新字符替换所有旧的字符 String replace(CharSequence target, CharSequence replacement) 使用新字符串替换旧的字符串 int compareTo(String anotherString) 比较2个字符串 int compareToIgnoreCase(String str) 忽略大小写比较2个字符串 public class Demo13_String { public static void main(String[] args) { String s = "Switch Mario"; String s2 = s.replace('i','a'); System.out.println(s2); String s3 = s.replace("Mario", "Zelda"); System.out.println(s3); String s4 = " switch one "; System.out.println("{"+s4.trim()+"}"); String s5 = "sEE"; String s6 = "see"; int sum = s5.compareTo(s6); System.out.println(sum); int sum2 = s5.compareToIgnoreCase(s6); System.out.println(sum2); } } String 练习反转字符串 import java.util.Scanner; public class Demo14_String { //反转字符串 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = ""; String s2 = ""; if( sc.hasNextLine() ){ s = sc.nextLine(); } char [] cs = s.toCharArray(); for (int i=0; i<(cs.length/2); i++) { char temp = cs[cs.length-1-i]; cs[cs.length-1-i] = cs[i]; cs[i] = temp; } System.out.println(new String(cs)); char [] cs2 = s.toCharArray(); for (int i=cs2.length-1; i>=0; i--) { s2 = s2 + cs2[i]; } System.out.println(s2); } } String 练习, 查找str在另一个str出现的次数 public class Demo15_String { public static void main(String[] args) { String sMax = "Whatever is worth doing is worth doing well."; String sMin = "worth"; int sum = 0; int j = 0; int index = 0; while(index<sMax.length()){ j = sMax.indexOf(sMin, index); if(-1 == j){ break; } else{ index = j + 1; sum++; } } System.out.println(sum); } }

August 10, 2021&nbsp;·&nbsp;5 分钟&nbsp;·&nbsp;Lizicai

Java重写equals方法 Li.032

未重写前equals是比较引用的地址, 如比较2个对象, 地址一定是不同的 重写后, 可以比较对象的属性相同, 则认为对象相同 public class Demo1_Object { private int age; private String name; Demo1_Object(){} Demo1_Object(int age,String name){ this.age = age; this.name = name; } public static void main(String[] args) { Demo1_Object d = new Demo1_Object(12, "xiaoming"); Demo1_Object d2 = new Demo1_Object(12, "xiaohong"); Demo1_Object d3 = new Demo1_Object(12, "xiaoming"); System.out.println(d.equals(d2)); System.out.println(d.equals(d3)); } public boolean equals(Object obj){ // 重写Object 类中equals方法 if( obj instanceof Demo1_Object ){ Demo1_Object demo = (Demo1_Object)obj; return this.name.equals(demo.name) && this.age == demo.age; } return false; } public boolean equals(Demo1_Object dobj){ //这个不是重写, 是重载 return this.name.equals(dobj.name) && this.age == dobj.age; } public String toString(){ return (age + name); } }

August 10, 2021&nbsp;·&nbsp;1 分钟&nbsp;·&nbsp;Lizicai

Java面向对象 Li.031

Package 包只能类的首行 com.lizica.java 默认编译是不会创建包的文件夹, 加入参数 -d .才会创建 运行类的方式就变了, 必须带上包的路径才的运行类 javac -d . Demo1_Package.java java com.lizicai.java.Demo1_Package package com.lizicai.java; public class Demo1_Package { public static void main(String[] args) { System.out.println("hello"); } } 引用时候3种方式, 推荐导入具体的类,第2种 class Demo2_Package{ public static void main(String[] args) { com.lizicai.java.Demo1_Package d = new com.lizicai.java.Demo1_Package(); d.sprint(); } } import com.lizicai.java.Demo1_Package; class Demo2_Package{ public static void main(String[] args) { Demo1_Package d = new Demo1_Package(); d.sprint(); } } import com.lizicai.java.*; class Demo2_Package{ public static void main(String[] args) { Demo1_Package d = new Demo1_Package(); d.sprint(); } } 不同类修饰符 和 包访问关系 类修饰符 本类 同一个包下(子类和无关系) 不同包下(子类) 不同包下(无关系) private 默认 protected public Java 修饰符总结 修饰符 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类的修饰符 权限修饰符:默认修饰符,public ...

August 6, 2021&nbsp;·&nbsp;4 分钟&nbsp;·&nbsp;Lizicai

Java接口和类 Li.030

Java 类 和 接口 类和类只能是继承, 类不能继承构造函数 类与接口, 类可以实现多个接口, 不能继承接口 接口与接口, 接口可以继承多个接口, 不能实现接口 类 类 接口, 类只能继承一个类, 同时实现多个接口 抽象类 与 接口 抽象类 成员变量: 常量 或者 变量 构造方法: 有 成员方法: 可以抽象, 也可以非抽象 接口 成员变量: 常量 成员方法: 抽象方法, 强制, 不写也会默认抽象 abstract class Demo1_Animal { public static void main (String[] args) { Cat c = new Cat(12, "美短"); c.eat(); c.sleep(); JumpCat jumpCat = new JumpCat(1, "跳高猫"); jumpCat.eat(); jumpCat.sleep(); jumpCat.jump(); } } abstract class Animal{ private int age; private String name; Animal(){ } Animal(int age, String name){ this.age = age; this.name = name; } public void setAge(int age){ this.age = age; } public int getAge() { return age; } public void setName(String name){ this.name = name; } public String getName() { return name; } abstract public void eat(); abstract public void sleep(); } class Cat extends Animal{ private int age; private String name; Cat(){} Cat(int age, String name){ super(age, name); } public void eat(){ System.out.println("Fish"); } public void sleep(){ System.out.println("sleep whit bowl"); } } interface Jump{ public void jump(); } class JumpCat extends Cat implements Jump{ JumpCat(){} JumpCat(int age, String name){ super(age,name); } public void jump(){ System.out.println("jump height"); } }

August 5, 2021&nbsp;·&nbsp;1 分钟&nbsp;·&nbsp;Lizicai

Hugo学习路线 Li.028

1. Hugo 学习路线 Hugo学习路线 1.1 基础    了解Hugo, 使用Hugo命令和Github, 搭建起来静态博客 Hugo和GitHub Pages搭建静态网站Li.004    了解一下常用hugo命令 Hugo常用命令Li.023    Hugo使用Markdown标记语言, Markdown语法学习是必要的, 仅有十几个标签 Markdown语法Li.002    找一个顺手的Markdown编辑器, 用来写作 Markdown编辑软件Li.003 1.2 进阶    解决Markdown图片存放问题 Hugo中Markdown图片资源存放几种方式Li.024 推荐存放在Github(2.1方式)上, 免费, 容易操作 1.3 难度    Hugo静态网站常用管理方式, 使用自有域名 Hugo静态网站常用管理方式Li.026 推荐方式1.2使用Github, 配置自己的域名, 免费    Hugo的Shortcode模板片段,插入视频, 定制网页 Hugo的shortcode(支持视频等)和主题修改Li.027 ...

August 4, 2021&nbsp;·&nbsp;1 分钟&nbsp;·&nbsp;Lizicai

Hugo的shortcode(支持视频等)和主题修改 Li.027

本篇文章属于Hugo学习路线Li.028一部分 1. Hugo的Shortcodes是什么? shortcode 是一些可以直接插入内容文档中的助记符,在Hugo 生成网站时,会将这些助记符替换为相应的HTML 代码片段(严格来说是模板片段) 2. 为什么需要Shortcodes. 虽然Markdown 支持html标签, 写起来相当麻烦, 碰到页面兼容性问题, 就得修改所有写了Html的Markdown文件, 想想都可怕 shortcode像如下, 类似特殊Markdown标记语言 显示效果    步骤, shortcode示例 可在Markdown中使用, 如果出现问题, 只需要修改模板片段即可. 3. Shortcodes 可以用来做什么, 嵌入视频之类, Hugo静态博客也能是自媒体. 3.1 可在网页嵌入视频, 常用网站Bilibili 和 Youtube.    在hugo网站目录layouts/shortcodes中创建bilibili.html文件 文件名称bilibili, 引用的时候也是相同名称 <style> .meta-media { position: relative; margin-bottom: 30px; display: flex; width: 100%; height: 0; padding-bottom: 75%; } .video { position: absolute; width: 100%; height: 100%; left: 0; top: 0; } </style> <div class="meta-media"> <iframe src="{{ .Get "src" }}&high_quality=1" frameborder="no" scrolling="yes" allowfullscreen="allowfullscreen" high_quality="1" framespacing="1" class="video" > </iframe> </div>    复制bilibili视频代码 示例视频地址 ...

August 3, 2021&nbsp;·&nbsp;2 分钟&nbsp;·&nbsp;Lizicai

Hugo静态网站常用管理方式 Li.026

1. 列表出全部方式 1.1 本地文章Hugo生成静态网站->上传Github, Github提供域名 1.2 本地文章Hugo生成静态网站->上传Github, 使用自有域名, 配置域名CNAME 1.3 本地文章Hugo生成静态网站->(rsycn)上传自己服务器上, 使用自有域名 1.4 本地文章Hugo生成静态网站->上传Github->(使用Github action)在服务器上拉取Github静态网站, 使用自有域名 1.5 本地文章Hugo生成静态网站->上传Github->(使用crontab 定时任务)在服务器上拉取Github静态网站, 使用自有域名 1.6 本地文章->上传服务器->服务器Hugo生成静态网站, 使用自有域名 1.7 服务器文章->服务器Hugo生成静态网站, 使用自有域名 2. 方式比较 方式 是否推荐 是否免费 更新及时 是否使用自有域名 难易程度(1最容易) 1.1方式 1.2方式 1.3方式 1.4方式 1.5方式 1.6方式 1.7方式 1.1方式(推荐), 免费, 更新及时, 会使用Hugo Git Markdown即可, 最简单的方式. 1.2方式(推荐), 除了1.1有的内容, 可使用自己域名. 1.3方式(推荐), 方式简单, 更新及时,会使用Hugo Markdown rsycn 配置ssh key即可 1.4方式(推荐), 自动化程序最高, 只需要上传到Github就可触发, 更新及时, 难度也稍微高点. 除会使用Hugo Git Markdown, 还需要使用Github action, SSH KEY配置. 1.5方式, 如半小时拉一次Github, 则有延时 1.6 1.7 更新同样及时, 不够自动化, 需要手动登录服务器执行. 3. 推荐方式使用, 1.1, 1.2, 1.3, 1.4 方式. 3.1 (方式 1.1 使用) 1.1方式使用参考 ...

August 2, 2021&nbsp;·&nbsp;3 分钟&nbsp;·&nbsp;Lizicai

rsycn同步图片或其他资源到服务器上 Li.025

1. rsycn 是什么 rsycn最大特点是可以检查本地和远程的文件差异, 只上传变动的文件. sftp 是全量上传. rsycn 会用在上传图片到Nginx服务器上, 作为图床使用 2. rsycn安装 Mac brew install rsycn Linux yum install rsycn Windows choco install rsycn 3. rsycn 命令 -r 参数, 递归同步, 同步文件夹时使用 rsycn -r source destination -a 参数, 除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等). rsycn -a source destination -u 跳过目标目录比源目录修改时间新的文件, 不同步这些文件 rsycn -ru source destination -t 保留文件的修改时间 rsycn -aut source destination –exclude 排除某些文件 rsycn -aur --exclude '.DS_Store' source destination –include 与–exclude连用 rsycn -aur --exclude '*' --include "readme.md" source destination –delete 删除目标目录中与源目录不一致文件 rsync -aut --delete --exclude '.DS_Store' source destination 4. 与ssh key连用, 上传到服务器上 4.1 配置ssh key    使用ssh命令生成密钥 ssh-keygen -t ed25519 生成密钥 ...

August 2, 2021&nbsp;·&nbsp;1 分钟&nbsp;·&nbsp;Lizicai