Java的StringBuffer类 Li.034

String 与 StringBuffer 区别 StringBuffer 是线程安全的可变字符序列 String 是一个不可变的字符序列 StringBuffer 的构造函数 public class Demo1_Sb { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); System.out.println(sb.length()); System.out.println(sb.capacity()); StringBuffer sb2 = new StringBuffer(10); System.out.println(sb2.length()); System.out.println(sb2.capacity()); StringBuffer sb3 = new StringBuffer("hello"); System.out.println(sb3.length()); System.out.println(sb3.capacity()); } } StringBuffer 的append 和 insert 方法 StringBuffer append() 支持int String StringBuffer boolean, 返回本身, StringBuffer insert(int , String) 在指定索引添加int String char等, 返回本身, 有可能会越界 public class Demo2_Sb { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append(2); System.out.println(sb); sb.append("haihai"); System.out.println(sb); sb.append(true); System.out.println(sb); sb.insert(1,"sss"); System.out.println(sb); } } StringBuffer 的deleteCharAt delete方法 StringBuffer deleteCharAt(int index) 删除指定索引的字符, 返回本身, 可能会越界 StringBuffer delete(int start, int end) 删除从start到end, 返回本身, 可能会越界 public class Demo3_Sb { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("Word hen da"); sb.deleteCharAt(10); System.out.println(sb); sb.delete(0,4); System.out.println(sb); } } StringBuffer 的 replace reverse方法 StringBuffer replace(int start, int end, String str) 用户str替换从start到end, 返回本身, 可能越界 StringBuffer reverse() 反转字符串, 返回本身 public class Demo4_StringBuffer { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("Hello"); sb.replace(0,1,"Say"); System.out.println(sb); sb.reverse(); System.out.println(sb); } } StringBuffer 的substring方法 String substring(int start) 从索引start开始向后截取, 返回新的String( 不再是StringBuffer本身了 ) String substring(int start, int end) 从start到end(不包含end)截取, 返回新的String( 不再是StringBuffer本身了 ) public class Demo5_StringBuffer { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("Hello"); String s = sb.substring(3); System.out.println(sb); System.out.println(s); String s2 = sb.substring(0,2); System.out.println(s2); } } StringBuffer 与 String 转换 String -> StringBuffer 构造方法 通过append()方法 StringBuffer -> String 通过构造方法 通过toString() 通过substring(0,length); public class Demo6_StringBuffer { public static void main(String[] args) { //String -> StringBuffer StringBuffer sb = new StringBuffer("See You Tomorrow"); StringBuffer sb2 = new StringBuffer(); sb2.append("HaHa"); // StringBuffer -> String StringBuffer sb3 = new StringBuffer("F Word"); String s = new String(sb3); String s2 = sb3.toString(); String s3 = sb3.substring(0,sb3.length()); } } 使用 StringBuffer 指定格式重新拼接成新的字符串,char[] c = {1,2,3}, 转换成[1, 2, 3] 使用 StringBuffer 中的方法 public class Demo7_StringBuffer { public static void main(String[] args) { int [] arr = {1,2,3}; StringBuffer sb = new StringBuffer(); if( arr.length <= 1){ sb = sb.append("[").append(sb).append("]"); }else if ( arr.length > 1 ){ for (int i=0; i<arr.length; i++) { if( 0 == i ){ sb = sb.append("[").append(arr[i]); } else if ( i > 0 && i != (arr.length-1)){ sb = sb.append(", ").append(arr[i]); } else if( i == arr.length-1) { sb = sb.append(", ").append(arr[i]).append("]"); } } } System.out.println(sb); } } StringBuffer 作为参数传递 和 String 作为参数传递 基本数据类型传递, 不改变其值. 引用数据类型传递改变其值 StringBuffer 作为参数传递 String 作为参数传递 public class Demo8_StringBuffer { public static void main(String[] args) { String s = "Hello"; System.out.println(s); change(s); System.out.println(s); StringBuffer sb = new StringBuffer(s); System.out.println(sb); change(sb); System.out.println(sb); } public static void change(String s){ s = s + "hello"; return ; } public static void change(StringBuffer sb){ sb.append(" Wrold!"); } } 冒泡排序 public class Demo9_StringBuffer { public static void main(String[] args) { int [] arr = {1, 100, 200, 30, 1, 0}; int temp = 0; sortArray(arr); printArray(arr); } public static int[] sortArray(int [] array){ int temp = 0; for (int i=0;i<array.length-1;i++){ for(int j=array.length-1;j > i;j--){ if(array[j] < array[j-1]){ temp = array[j]; array[j] = array[j-1]; array[j - 1] = temp; } } } return array; } public static void printArray(int [] array){ for (int i=0;i<array.length;i++){ System.out.println(array[i]); } } } 选择冒泡排序 public class Demo2_SortArray { public static void main(String[] args) { int [] arr = { 1,22, 30,3, 100}; selectArray(arr); printArray(arr); } public static int[] selectArray(int [] arr){ for (int i=0;i<arr.length;i++){ for (int j=i;j<arr.length;j++){ if(arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr; } public static void printArray(int [] array){ for (int i=0;i<array.length;i++){ System.out.println(array[i]); } } } 二分查找 public static int search(int [] arr, int t){ int index = -1; int min = 0; int max = arr.length; int mid = arr.length/2; int count = 0; while ( count <= Math.log(arr.length)/Math.log(2)){ if(arr[mid] == t){ return mid; } else if (arr[mid] < t ){ min = mid + 1; mid = (min + max)/2; } else if (arr[mid] > t){ max = mid - 1; mid = (min + max)/2; } count ++; } return index; } Array 类的排序 和 二分查找 void sort(int[] a) 排序, 快速排序 int binarySearch(int[] a, int key) 在数组中查找key, 找到返回索引位置, 没找到则返回插入-位置-1 String toString(int[] a) 数组转成String 输出 public class Demo4_SortArray { public static void main(String[] args) { int [] arr = { 15, 100, 1 , 2, 3, 15, 20, 30, 50}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); int k1 = Arrays.binarySearch(arr, 20); System.out.println(k1); int k2 = Arrays.binarySearch(arr, 200); System.out.println(k2); } } Integer parseInt 方法 字符串和数字转换 inter 最大值 最小值 2 进制 8进制 16进制转换 public class Demo1_Integer { public static void main(String[] args) { int aInt = Integer.parseInt("190"); System.out.println(Integer.toBinaryString(aInt)); System.out.println(Integer.toHexString(aInt)); System.out.println(Integer.toOctalString(aInt)); Integer bInt = new Integer("180"); System.out.println(bInt); System.out.println(bInt.toString()); System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE); } } int 和 String 转换 public class Demo2_Integer { public static void main(String[] args) { // int -> String int a = 160; String s1 = a + ""; String s2 = String.valueOf(a); Integer i3 = new Integer(a); String s3 = i3.toString(); String s4 = Integer.toString(a); // String -> int String str = "200"; int a1 = Integer.parseInt(str); Integer ig2 = new Integer(str); int a2 = ig2.intValue(); } } Java 基本数据类型自动装箱 和 拆箱 基本数据类型才可以自动装箱 拆箱 Integer Boolean 自动装箱 拆箱时需要判断对象不为 byte范围内-128到127内, 不会创建新的对象, 而是从常量池中获取. public class Demo3_Integer { public static void main(String[] args) { Integer i = 200; System.out.println(i); int a = i + 100; System.out.println(a); Integer a2 = 127; Integer a3 = 127; Integer a4 = 128; Integer a5 = 128; System.out.println(a2 == a3); System.out.println(a4 == a5); System.out.println(a2.equals(a3)); System.out.println(a4.equals(a5)); Integer a7 = new Integer(127); Integer a8 = new Integer(127); System.out.println(a7 == a8); // 自动装箱用的Integer.valueOf方法 Integer a9 = Integer.valueOf(127); Integer a10 = Integer.valueOf(127); System.out.println(a9 == a10); // Integer -> int Integer iObject = Integer.valueOf(3); int a11 = iObject.intValue(); System.out.println(a11); } } // 200 300 T F T T F T 3

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

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

2021计划 Li.029

计划 时间过的太快了 俺30了 说真的还没有什么能拿出手的技能 感觉一线越来越难生存 分分钟失业 中年焦虑 生活有点难 之前估算的, 要想留在一线, 工资至少30K才行 也没 所以考虑回省会变成一迫切的问题了 看了省会情况, 没啥重要技能难找工作的 下一段时间, 计划学习Java 至少能写个项目出来 这样回省会不至于饿死 就这样 2021 年 08 月 05 日 周四

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