当前位置: 首页 > news >正文

Java常用的API_02(正则表达式、爬虫)

Java正则表达式

  • 七、正则表达式
    • 7.1 格式
      • 7.1.1 字符类
        • 注意
        • 字符类示例代码1
        • 例2
      • 7.1.2 预定义字符
        • 预定义字符示例代码
        • 例2
      • 7.1.3 区别总结
    • 7.2 使用`Pattern`和`Matcher`类与直接使用`String`类的`matches`方法的区别。
      • (1) 使用`Pattern`和`Matcher`类
        • 示例代码
      • (2)直接使用`String`类的`matches`方法
        • 示例代码
      • (3)区别总结
      • (4)示例对比
          • 使用`Pattern`和`Matcher`类
        • 直接使用`String`类的`matches`方法
    • 7.3 数量词
    • 7.4这是一个正则表达式符号的总结表。
      • 7.4.1 各个符号
        • 解释
      • 7.4.2 量词总结表。
        • 解释
  • 八、爬虫
    • 8.1 条件爬取
      • 8.1.1 正向预查
      • 8.1.2 其他的
    • 8.2贪婪爬取
    • 8.3 正则表达式中的方法
    • 8.4 分组
      • 8.4.1 首尾相同单字符 abc123cba
      • 8.4.2 首尾相同多字符abc123abc
      • 8.4.3 开始的样式和结束的样式一样aaa12aaa

七、正则表达式

正则表达式是一种强大的文本匹配工具,用于在字符串中搜索和匹配特定模式的文本。
在Java中,正则表达式由java.util.regex包提供支持。它可以用于验证输入的格式、提取文本中的特定部分、替换文本等操作。

7.1 格式

7.1.1 字符类

字符类用于匹配一组字符中的任意一个字符。字符类用方括号[]括起来,表示在这些字符中匹配一个字符。

  • [abc]:匹配字符a、b或c。
  • [^abc]:匹配除a、b、c之外的任何字符。
  • [a-zA-Z]:匹配从a到z或从A到Z的任意一个字符。
  • [a-d[m-p]]:匹配a到d或m到p的任意一个字符。
  • [a-z&&[def]]:匹配a到z和def的交集,即d、e、f。
  • [a-z&&[^bc]]:匹配a到z并且不包括b和c的字符(即[ad-z])。
  • [a-z&&[^m-p]]:匹配a到z并且不包括m到p的字符(即[a-lq-z])。
注意
  • [a-z&&[def]]:匹配a到z和def的交集,即d、e、f。
  • 像这样的&&,必须是两个,如果是一个&,就只是说明其是一个‘&’字符符号
字符类示例代码1
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class CharClassExample {public static void main(String[] args) {// 匹配a、b或c中的任意一个字符String regex1 = "[abc]";String input1 = "apple";System.out.println(matchesPattern(regex1, input1)); // true// 匹配除a、b、c之外的任何字符String regex2 = "[^abc]";String input2 = "def";System.out.println(matchesPattern(regex2, input2)); // true// 匹配从a到z或从A到Z的任意一个字符String regex3 = "[a-zA-Z]";String input3 = "Hello";System.out.println(matchesPattern(regex3, input3)); // true// 匹配a到d或m到p的任意一个字符String regex4 = "[a-d[m-p]]";String input4 = "cat";System.out.println(matchesPattern(regex4, input4)); // true// 匹配a到z和def的交集,即d、e、fString regex5 = "[a-z&&[def]]";String input5 = "dog";System.out.println(matchesPattern(regex5, input5)); // true// 匹配a到z并且不包括b和c的字符String regex6 = "[a-z&&[^bc]]";String input6 = "apple";System.out.println(matchesPattern(regex6, input6)); // true// 匹配a到z并且不包括m到p的字符String regex7 = "[a-z&&[^m-p]]";String input7 = "hello";System.out.println(matchesPattern(regex7, input7)); // true}private static boolean matchesPattern(String regex, String input) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);return matcher.find();}
}
例2
public class CharClassExample {public static void main(String[] args) {// 只能是 a b cSystem.out.println("----------1----------");System.out.println("a".matches("[abc]")); // trueSystem.out.println("k".matches("[abc]")); // false// 不能出现 a b cSystem.out.println("----------2----------");System.out.println("a".matches("[^abc]")); // falseSystem.out.println("z".matches("[^abc]")); // trueSystem.out.println("zz".matches("[^abc]")); // falseSystem.out.println("zz".matches("[^abc][^abc]")); // true// a到z A到Z (包括头尾的范围)System.out.println("----------3----------");System.out.println("a".matches("[a-zA-Z]")); // trueSystem.out.println("Z".matches("[a-zA-Z]")); // trueSystem.out.println("aa".matches("[a-zA-Z]")); // falseSystem.out.println("zz".matches("[a-zA-Z]")); // falseSystem.out.println("0".matches("[a-zA-Z]")); // false}
}

7.1.2 预定义字符

匹配一组字符中的任意一个字符,其用于简化正则表达式的书写。

  • .:匹配任意字符。
  • \d:匹配一个数字字符,相当于[0-9]
  • \D:匹配一个非数字字符,相当于[^0-9]
  • \s:匹配一个空白字符,包括空格、制表符、换行符等,相当于[\t\n\x0B\f\r]
  • \S:匹配一个非空白字符,相当于[^\s]
  • \w:匹配一个单词字符,包括字母、数字和下划线,相当于[a-zA-Z_0-9]
  • \W:匹配一个非单词字符,相当于[^\w]

通过使用这些字符类和预定义字符,可以构建出复杂的正则表达式来匹配特定的文本模式。

预定义字符示例代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PredefinedCharExample {public static void main(String[] args) {// 匹配任意字符String regex1 = ".";String input1 = "a";System.out.println(matchesPattern(regex1, input1)); // true// 匹配一个数字字符String regex2 = "\\d";String input2 = "5";System.out.println(matchesPattern(regex2, input2)); // true// 匹配一个非数字字符String regex3 = "\\D";String input3 = "a";System.out.println(matchesPattern(regex3, input3)); // true// 匹配一个空白字符String regex4 = "\\s";String input4 = " ";System.out.println(matchesPattern(regex4, input4)); // true// 匹配一个非空白字符String regex5 = "\\S";String input5 = "a";System.out.println(matchesPattern(regex5, input5)); // true// 匹配一个单词字符String regex6 = "\\w";String input6 = "a";System.out.println(matchesPattern(regex6, input6)); // true// 匹配一个非单词字符String regex7 = "\\W";String input7 = "!";System.out.println(matchesPattern(regex7, input7)); // true}private static boolean matchesPattern(String regex, String input) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);return matcher.find();}
}
例2
public class PredefinedCharExample {public static void main(String[] args) {// 匹配任意字符System.out.println("----------1----------");System.out.println("a".matches(".")); // trueSystem.out.println("1".matches(".")); // trueSystem.out.println(" ".matches(".")); // trueSystem.out.println("\n".matches(".")); // false// 匹配一个数字字符System.out.println("----------2----------");System.out.println("5".matches("\\d")); // trueSystem.out.println("a".matches("\\d")); // false// 匹配一个非数字字符System.out.println("----------3----------");System.out.println("a".matches("\\D")); // trueSystem.out.println("5".matches("\\D")); // false// 匹配一个空白字符System.out.println("----------4----------");System.out.println(" ".matches("\\s")); // trueSystem.out.println("\t".matches("\\s")); // trueSystem.out.println("a".matches("\\s")); // false// 匹配一个非空白字符System.out.println("----------5----------");System.out.println("a".matches("\\S")); // trueSystem.out.println(" ".matches("\\S")); // false// 匹配一个单词字符System.out.println("----------6----------");System.out.println("a".matches("\\w")); // trueSystem.out.println("1".matches("\\w")); // trueSystem.out.println("_".matches("\\w")); // trueSystem.out.println("!".matches("\\w")); // false// 匹配一个非单词字符System.out.println("----------7----------");System.out.println("!".matches("\\W")); // trueSystem.out.println("a".matches("\\W")); // false}
}

在Java中,使用正则表达式进行字符串匹配时,字符类和预定义字符的写法有一些区别。以下是两种写法的主要区别:

7.1.3 区别总结

  1. 字符类

    • 使用方括号[]定义。
    • 可以包含单个字符、字符范围或字符集的交集和补集。
    • 适用于需要匹配特定字符集合的情况。
  2. 预定义字符

    • 使用反斜杠\加特定字符定义。
    • 是常用字符类的简写形式。
    • 适用于匹配常见字符类型(如数字、字母、空白字符等)的情况。

7.2 使用PatternMatcher类与直接使用String类的matches方法的区别。

(1) 使用PatternMatcher

这种方法适用于需要多次复用同一个正则表达式的情况。通过编译正则表达式为Pattern对象,然后使用Matcher对象进行匹配,可以提高效率。

示例代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PatternMatcherExample {public static void main(String[] args) {String regex1 = "[abc]";String input1 = "apple";System.out.println(matchesPattern(regex1, input1)); // true}private static boolean matchesPattern(String regex, String input) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);return matcher.find();}
}

(2)直接使用String类的matches方法

这种方法适用于简单的、一次性的正则表达式匹配。String类的matches方法会在内部编译正则表达式并进行匹配,适合于不需要复用正则表达式的情况。

示例代码
public class StringMatchesExample {public static void main(String[] args) {// 只能是 a b cSystem.out.println("----------1----------");System.out.println("a".matches("[abc]")); // trueSystem.out.println("k".matches("[abc]")); // false}
}

(3)区别总结

  1. 使用PatternMatcher

    • 适用于需要多次复用同一个正则表达式的情况。
    • 通过编译正则表达式为Pattern对象,然后使用Matcher对象进行匹配。
    • 提高了效率,特别是在需要多次匹配的情况下。
  2. 直接使用String类的matches方法

    • 适用于简单的、一次性的正则表达式匹配。
    • 每次调用matches方法时,都会编译正则表达式并进行匹配。
    • 适合于不需要复用正则表达式的情况。

(4)示例对比

使用PatternMatcher
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PatternMatcherExample {public static void main(String[] args) {String regex1 = "[abc]";String input1 = "apple";System.out.println(matchesPattern(regex1, input1)); // true}private static boolean matchesPattern(String regex, String input) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);return matcher.find();}
}
直接使用String类的matches方法
public class StringMatchesExample {public static void main(String[] args) {// 只能是 a b cSystem.out.println("----------1----------");System.out.println("a".matches("[abc]")); // trueSystem.out.println("k".matches("[abc]")); // false}
}

7.3 数量词

  • X?:X,一次或0次
  • X*:X,零次或多次
  • X+:X,一次或多次
  • X{n}:X,正好n次
  • X{n,}:X,至少n次
  • X{n,m}:X,至少n但不超过m次

这些量词用于正则表达式中来指定字符或子模式的重复次数。

public class RegexExample {public static void main(String[] args) {// 示例1: X?System.out.println("aaab".matches("a?")); // falseSystem.out.println("a".matches("a?"));    // trueSystem.out.println("".matches("a?"));     // true// 示例2: X*System.out.println("aaab".matches("a*")); // falseSystem.out.println("aaa".matches("a*"));  // trueSystem.out.println("".matches("a*"));     // true// 示例3: X+System.out.println("aaab".matches("a+")); // falseSystem.out.println("aaa".matches("a+"));  // trueSystem.out.println("a".matches("a+"));    // true// 示例4: X{n}System.out.println("aaab".matches("a{2}")); // falseSystem.out.println("aa".matches("a{2}"));   // true// 示例5: X{n,}System.out.println("aaab".matches("a{2,}")); // falseSystem.out.println("aaa".matches("a{2,}"));  // true// 示例6: X{n,m}System.out.println("aaab".matches("a{1,2}")); // falseSystem.out.println("aa".matches("a{1,2}"));   // trueSystem.out.println("a".matches("a{1,2}"));    // true}
}

在这里插入图片描述

  • (?i):这是一个正则表达式的模式修饰符,用于忽略大小写。
public class RegexExample {public static void main(String[] args) {// 忽略大小写的书写方式// 在匹配的时候忽略abc的大小写String regex = "a(?i)bc";System.out.println("----------------------------");System.out.println("abc".matches(regex)); // trueSystem.out.println("ABC".matches(regex)); // trueSystem.out.println("aBC".matches(regex)); // true}
}

同样的忽略
(X|x)与 [Xx]

注意()的使用
()立大功

public class RegexExample {public static void main(String[] args) {// 忽略大小写的书写方式// 在匹配的时候忽略b的大小写String regex = "a((?i)b)c";System.out.println("----------------------------");System.out.println("abc".matches(regex)); // trueSystem.out.println("ABC".matches(regex)); // falseSystem.out.println("aBc".matches(regex)); // true}
}

7.4这是一个正则表达式符号的总结表。

7.4.1 各个符号

符号含义示例
[]里面的内容出现一次[0-9] [a-zA-Z0-9]
()分组a(bc)+
^取反[^abc]
&&交集,不能写单个的&[a-z&&m-p]
``写在方括号外面表示并集
.任意字符\n 回车符号不匹配
\转义字符\\d
\d0-9\\d+
\D非0-9\\D+
\s空白字符[ \t\n\x0B\f\r]
\S非空白字符[^\\s]
\w单词字符[a-zA-Z_0-9]
\W非单词字符[^\\w]
解释
  • []:匹配方括号内的任意一个字符。例如,[0-9]匹配任何一个数字。
  • ():用于分组。例如,a(bc)+匹配a后面跟一个或多个bc
  • ^:在方括号内表示取反。例如,[^abc]匹配任何不是abc的字符。
  • &&:表示交集。例如,[a-z&&m-p]匹配mp之间的字符。
  • |:表示并集。例如,x|X匹配xX
  • .:匹配任意字符(除了换行符)。
  • \:转义字符,用于转义特殊字符。
  • \d:匹配任何一个数字(0-9)。
  • \D:匹配任何一个非数字字符。
  • \s:匹配任何一个空白字符(包括空格、制表符、换行符等)。
  • \S:匹配任何一个非空白字符。
  • \w:匹配任何一个单词字符(包括字母、数字和下划线)。
  • \W:匹配任何一个非单词字符。

这些符号和示例可以帮助你更好地理解和使用正则表达式。

7.4.2 量词总结表。

符号含义示例
?0次或1次\\d?
*0次或多次\\d* (abc)*
+1次或多次\\d+ (abc)+
{}具体次数a{7} \\d{7,19}
(?i)忽略后面字符的大小写(?i)abc
a((?i)b)c只忽略b的大小写a((?i)b)c
解释
  • ?:匹配前面的字符0次或1次。例如,\\d?匹配0个或1个数字。
  • *:匹配前面的字符0次或多次。例如,\\d*匹配0个或多个数字,(abc)*匹配0个或多个abc
  • +:匹配前面的字符1次或多次。例如,\\d+匹配1个或多个数字,(abc)+匹配1个或多个abc
  • {}:匹配前面的字符具体的次数。例如,a{7}匹配7个a\\d{7,19}匹配7到19个数字。
  • (?i):忽略后面字符的大小写。例如,(?i)abc匹配abcABCaBc等。
  • a((?i)b)c:只忽略b的大小写。例如,a((?i)b)c匹配abcaBc,但不匹配ABC

八、爬虫

8.1 条件爬取

8.1.1 正向预查

要匹配的内容后面加上一个正向预查,指定后面的数据需要存在但不包含在匹配结果中。

String text = "前面的数据后面的数据";
String pattern = "前面的数据(?=后面的数据)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);if (m.find()) {System.out.println(m.group());
}

在这里插入图片描述

在这个示例中,正则表达式(?=后面的数据)表示匹配"前面的数据"后面紧跟着"后面的数据",但只返回"前面的数据"部分。

8.1.2 其他的

String text = "前面的数据后面的数据";
String pattern = "前面的数据(?:后面的数据)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);if (m.find()) {System.out.println(m.group());
}

在这里插入图片描述
非捕获分组不需要再用本组数据,仅仅把数据括起来,不占组号。
(?:)(?=)(?!)

符号含义
?:正则获取所有
?=正则获取前面
?! 正则 获取不是指定内容的前面的部分

8.2贪婪爬取

只写+或者·*·就是贪婪爬取
+?非贪婪爬取
*?非贪婪爬取
在这里插入图片描述

以下是使用贪婪匹配和非贪婪匹配的正则表达式示例:

  1. 使用贪婪匹配+
String text = "aaaaaab";
String pattern = "a+";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);while (m.find()) {System.out.println("贪婪匹配结果:" + m.group());
}
  1. 使用非贪婪匹配+?
String text = "aaaaaab";
String pattern = "a+?";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);while (m.find()) {System.out.println("非贪婪匹配结果:" + m.group());
}
  1. 使用贪婪匹配*
String text = "aaaaaab";
String pattern = "a*";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);while (m.find()) {System.out.println("贪婪匹配结果:" + m.group());
}
  1. 使用非贪婪匹配*?
String text = "aaaaaab";
String pattern = "a*?";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);while (m.find()) {System.out.println("非贪婪匹配结果:" + m.group());
}

这些示例演示了贪婪匹配和非贪婪匹配在正则表达式中的应用。

8.3 正则表达式中的方法

在Java中,正则表达式的常用方法包括matchesreplaceAllsplit。下面是它们的简要介绍:

  • matches:用于检查整个字符串是否匹配正则表达式。返回一个布尔值,表示是否完全匹配。
String text = "Hello, World!";
boolean isMatch = text.matches("Hello.*");
System.out.println(isMatch); // true
  • replaceAll:用于替换字符串中匹配正则表达式的部分。可以用指定的字符串替换匹配的部分。
String text = "apple, orange, banana";
String replacedText = text.replaceAll("\\b\\w+\\b", "fruit");
System.out.println(replacedText); // fruit, fruit, fruit
  • split:根据正则表达式将字符串拆分为子字符串数组。返回一个字符串数组,包含根据正则表达式拆分的子字符串。
String text = "apple,orange,banana";
String[] fruits = text.split("a");
for (String fruit : fruits) {System.out.println(fruit);
}
//pple,or
//nge,b
//n
//n

这些方法可以帮助你在Java中使用正则表达式进行匹配、替换和拆分字符串。

8.4 分组

在Java中,可以使用圆括号()来创建一个分组。

在正则表达式中,分组可以对匹配的部分进行逻辑分组,以便后续引用或操作。
组号是连续的,从1开始不间断的。以左括号为基准。
非捕获分组不需要再用本组数据,仅仅把数据括起来,不占组号。

(?:)(?=)(?!)
在这里插入图片描述

public class SimplifyString {public static void main(String[] args) {// 定义原始字符串String s = "aabbbbbbcccc";// 使用正则表达式替换重复的字符// (.) 捕获组匹配任意字符// \\1+ 量词匹配捕获组1的一次或多次出现// $1 引用捕获组1的内容(即匹配的单个字符)进行替换String simplified = s.replaceAll("(.)\\1+", "$1");// 输出简化后的字符串System.out.println(simplified);  // 输出: abc}
}

8.4.1 首尾相同单字符 abc123cba

\\组号意味着吧X组的东西在拿来用一次

String regex1="(.).+\\1";

在这里插入图片描述

8.4.2 首尾相同多字符abc123abc

String regex1="(.+).+\\1";

在这里插入图片描述

8.4.3 开始的样式和结束的样式一样aaa12aaa

(.)是把字母看做一组
\\2是把首字母重复
*是把\\2, ——— 0次或者多次

String regex1="((.)\\2*).+\\1";

在这里插入图片描述

相关文章:

Java常用的API_02(正则表达式、爬虫)

Java正则表达式 七、正则表达式7.1 格式7.1.1 字符类注意字符类示例代码1例2 7.1.2 预定义字符预定义字符示例代码例2 7.1.3 区别总结 7.2 使用Pattern和Matcher类与直接使用String类的matches方法的区别。(1) 使用Pattern和Matcher类示例代码 &#xff…...

2024最新图纸加密软件Top5排行榜

“小张,你听说了吗?最近我们部门又发生了一起图纸泄露事件,真是让人头疼。”小李眉头紧锁,手中紧握着一份重要的设计图纸。 “是啊,这图纸可是咱们的心血,一旦泄露出去,后果不堪设想。”小张回…...

每日一练 - IEEE 802.1Q中STP协议

01 真题题目 关于设备 SWC 的上述配置说法正确的是 (多选) A.SWC 为根交换机 B.stp instance 1 priority 4096 是配置交换机在实例 1 中的优先级为 4096, 该优先级默认为0 C.gtp edged-port enable 该命令是启用交换机 5WC 的 Ethernet 1/0/2 为边缘端口 D.sto …...

设计模式--工厂设计模式

什么是工厂模式? 工厂模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。这样,工厂方法模式让类的实例化延迟到子类。通过工厂方法模式,我们可以在不修改现有代码的情况下…...

消息队列-MQ

消息队列-MQ 1、什么是MQ?为什么要使用MQ?2、MQ有什么优缺点?3、有哪些常见的MQ实现?都有什么区别?4、MQ如何保证消息的可靠传输?消息丢了怎么办?5、如何保证消息的顺序性?6、如何解决消息队列的延时以及过期失效问题?7、消息队列满了以后该怎么处理?8、假设有几百万…...

近源渗透简介

什么是近源渗透 通过乔装、社工等方式实地物理侵入企业办公区域,通过其内部各种潜在攻击面(如Wi-Fi网络、RFID门禁、暴露的有线网口、USB接口等)获得“战果”,最后以隐秘的方式将评估结果带出上报,由此证明企业安全防…...

13 IP层协议-网际控制报文协议ICMP

计算机网络资料下载:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140148186 为了更有效的转发IP数据报和提高交付成果的机会,在网际层使用了网际控制报文协议ICMP。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP不是高层协议数…...

第一节Linux常见指令

目录 1.Linux下基本指令 ls指令 pwd 命令 cd 指令 知识点:理解树形结构 touch 指令 mkdir指令(重要) rmdir指令 && rm指令(重要) 知识点:ls file* 可以找到当前目录下任何以file开头的文件​编辑 知识点:热键 man指令()重要 补充知识点:nano cp…...

嵌入式全栈设计思路:STM32G4+ChibiOS+FreeRTOS+PID控制+PFC算法构建高效智能电源管理系统(附代码示例)

智能电源管理系统是一个基于STM32G4微控制器的高性能数字电源控制解决方案。本项目旨在设计一个功能全面、高效稳定的电源管理系统,可广泛应用于工业控制、新能源、通信设备等领域。 1.1 系统主要特点 高精度数字电源控制:利用STM32G4的高性能ADC和定时器,实现精确…...

Linux驱动开发-04LED灯驱动实验(直接操作寄存器)

一、Linux 下LED 灯驱动原理 Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。驱动访问底层的硬件除了使用内存映射将物理地址空间转化为虚拟地址空间,去进行读写修改,还可以通过各种子系统函数去进行操作 1.1 地址映射 MMU 全称…...

Linux命令更新-sort 和 uniq 命令

简介 sort 和 uniq 都是 Linux 系统中常用的文本处理命令。 sort 命令用于对文件内容进行排序。 uniq 命令用于去除文件中重复出现的行。 1. sort 命令 命令格式 sort [选项] [文件]选项: -n: 按照数字进行排序 -r: 反向排序 -c: 统计每个元素出现的次数 -…...

【密码学】密码学数学基础:剩余系

不得不啃的密码学数学基础之剩余系是个啥?数学里面有好多的定义都有前置的数学概念,要想弄懂剩余系还得先说说“同余”。 一、同余 那么“同余”有是个什么呢?在谈论“同余”之前,我们先圈定个讨论的范围。接下来讨论的都是整数集…...

量化发展历史简述,QMT/PTrade+恒生UFT、LDP极速柜台适用哪些情形?

量化发展简述 1.2004年萌发阶段:策略局限在量化择时,量化选股等; 光大保德信量化核 心基金 上投摩根阿尔法基 金 金融危机,海归引入。 2.2010量化元年:中低频交易为主,主要依靠套利、对冲、多因子策略等…...

linux服务器anaconda安装及环境变量配置

1.下载anaconda Index of /可以在此链接中下载所需要的anaconda安装文件。使用一下的命令进行下载: wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh2.安装anaconda 进入到下载的目录下,使用下面的的命令进行安装&#…...

如何在 Objective-C 中实现多态性,并且它与其他面向对象编程语言的多态性实现有何差异?

在Objective-C中,多态性可以通过使用父类的指针来调用子类的方法来实现。具体来说,可以定义一个父类的指针,然后将子类的实例赋值给这个指针。这样,即使使用父类的指针来调用方法,实际上会调用子类的方法。 需要注意的…...

阿里云OSS简单应用

前提条件 购买OSS标准存储包之后,就可以使用OSS的各种服务了 1 获取自己的OSS Endpoint OSS访问域名和数据中心_对象存储(OSS)-阿里云帮助中心 在官方的表格上找到自己OSS标准存储包对应的外网Endpoint即可 2 创建自己的阿里云Access Key ID 和 Access Key Secret …...

cleanshot Mac 上的截图工具

笔者闲来无事,最近在找一些mac上好用的工具其中一款就是cleanShot。为什么不用原有的mac自带的呢。因为相对来说编辑功能不算全面,不支持长截图。那有没有一款软件支持关于截图的好用工具呢。 所以笔者找了这款。安装包是直接安装就可使用的。请大家点赞…...

JMeter进行HTTP接口测试的技术要点

参数化 用户定义的变量 用的时候 ${名字} 用户参数 在参数列表中传递 并且也是${} csv数据文件设置 false 不忽略首行 要首行 从第一行读取 true 忽略首行 从第二行开始 请求时的参数设置: 这里的名称是看其接口需要的请求参数的名称 这里的变量名称就是为csv里面…...

基于智能算法的品牌视觉识别系统优化研究

基于智能算法的品牌视觉识别系统优化研究 一、引言 随着人工智能技术的快速发展,智能算法在各个领域的应用日益广泛。在品牌视觉识别系统中,智能算法同样发挥着重要作用。品牌视觉识别系统(Visual Identity System,简称VIS)是企业通过统一的视觉符号系统,将企业的理念、…...

递归锁与普通锁的区别

什么是锁? 在多线程编程中,锁是一种机制,用来确保某些代码块在同一时间只能被一个线程执行。想象一下,你和你的朋友们都想同时进入一个只有一把椅子的房间。为了避免混乱,你们需要一个锁来控制进入的顺序。 普通锁&a…...

FPGA上板项目(二)——PLL测试

目录 实验内容实验原理实验步骤实验结果 实验内容 将差分时钟信号转化为 192MHz 时钟信号作为输出。 实验原理 PLL,即锁相环,一种反馈控制电路,具有时钟倍频、分频、相位偏移和可编程占空比的功能。 实验步骤 添加 clocking wizard IP核&…...

C语言 | Leecode C语言题解之第229题多数元素II

题目: 题解: /*** Note: The returned array must be malloced, assume caller calls free().*//*假定 num1,num2 为出现次数大于 nums.length / 3 的两个数。(最多出现两个)遍历 nums, 若出现 num1、num2…...

mybatis-plus映射mysql的json类型的字段

一、对json里面内容建立实体类 Data AllArgsConstructor NoArgsConstructor public class RouteMetaEntity {private String title;private Boolean affix;private Boolean isAlwaysShow; }二、主类做映射 TableField(typeHandler JacksonTypeHandler.class)private RouteMe…...

20240716 Codeforces题目

A - Split the Multiset 题目 多集是一组数字,其中可以有相等的元素,数字的顺序无关紧要。例如, { 2 , 2 , 4 } \{2,2,4\} {2,2,4} 是一个multiset。 你有一个多集 S S S 。最初,multiset只包含一个正整数 n n n 。即 S {…...

29.【C语言】自定义函数

1、自定义详解 *提示&#xff1a;先看第12,19篇 例&#xff1a;写一个程序交换两个变量的值 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void swap(int x, int y) {int z 0;z x;x y;y z; } int main() {int a 10;int b 20;swap(a, b);printf("%d…...

C++面向对象编程 基础篇(3)函数基础

3、函数基础 3.1 函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的 注意事项&#xff1a; 如果某个位置已经有了默认参数&#xff0c;往后的形参都要有默认参数 函数声明和函数实现只能有一个有默认参数 示例&#xff1a; //如果自己传入参数&…...

excel有条件提取单元格特定文本(筛选纯文字的单元格或含有数字的单元格、单元格提取不同的文本长度)

实际工作背景 需要对导出的银行流水中的数十个村以及对应的村小组进行分组统计&#xff0c;但是初始的表格中村和小组是混在一起的&#xff0c;如下图所示&#xff1a; 目的&#xff1a;将大树村和大树村小组名称分别筛选出来 1.观察发现&#xff0c;大树村小组的单元格第4…...

HBase 在统一内容平台业务的优化实践

作者&#xff1a;来自 vivo 互联网服务器团队-Leng Jianyu、Huang Haitao HBase是一款开源高可靠性、扩展性、高性能和灵活性的分布式非关系型数据库&#xff0c;本文围绕数据库选型以及使用HBase的痛点展开&#xff0c;从四个方面对HBase的使用进行优化&#xff0c;取得了一些…...

【异常解决】Unable to start embedded Tomcat Nacos 启动报错

Unable to start embedded Tomcat Nacos 启动报错解决方案 一、背景描述二、原因分析三、解决方案 一、背景描述 Windows 本地启动 Nacos&#xff08;2.2.0&#xff09; 服务&#xff0c;控制台报错 Unable to start embedded Tomcat。 报错信息&#xff1a;Unable to start …...

【Java面向对象】对象和类

文章目录 1.为对象定义类2.定义类2.1 主类 3.类与对象3.1 构造方法3.2 通过引用变量访问对象3.3 访问对象的数据和方法3.4 引用数据域和 null 值3.5 基本类型变量和引用类型变量的区别 4.常见的类 1.为对象定义类 面向对象程序设计(OOP) 就是使用对象进行程序设计。对象 (obje…...