Java seven 解读正则表达式、java方法的使用

目录

  • Java 正则表达式
    • 1. java.util.regex 包
    • 2. 捕获组
    • 3. 正则表达式语法
    • 4. Matcher 类的方法
  • Java 方法
    • 1. 定义:
    • 2. 优点
    • 3. 命名规则
    • 4. 方法调用
    • 5. 方法的重载
    • 6. 构造方法
    • 7. 可变参数
    • 8. finalize() 方法

Java 正则表达式

1. java.util.regex 包

Pattern 类: 该方法接受一个正则表达式作为它的第一个参数。

Matcher 类: 对输入字符串进行解释和匹配的操作。 Pattern.matches(pattern, content)

PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

2. 捕获组

捕获组是一种将多个字符作为一个单独单元进行处理的方法。在正则表达式中,通过使用括号来创建捕获组。捕获组可以用于匹配、替换和提取字符串中的特定部分。

使用括号将要分组的字符括起来,形成一个捕获组。例如,正则表达式 (abc) 中的 (abc) 就是一个捕获组。

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Main {public static void main(String[] args) {String input = "Hello, my name is John Doe.";String regex = "name is (\\w+)";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);if (matcher.find()) {String match = matcher.group(1);System.out.println("Match: " + match);}}
}

3. 正则表达式语法

\

将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如, n匹配字符 n。\n 匹配换行符。序列 \\ 匹配 \ ,\( 匹配 (。

^

匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。

$

匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。

*

零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。

一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。

?

零次或一次匹配前面的字符或子表达式。例如,"do(es)?“匹配"do"或"does"中的"do”。? 等效于 {0,1}。

{n}

n 是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。

{n,}

n 是非负整数。至少匹配 n 次。例如,"o{2,}“不匹配"Bob"中的"o”,而匹配"foooood"中的所有 o。"o{1,}“等效于"o+”。"o{0,}“等效于"o*”。

{n,m}

m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的头三个 o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。

?

当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?“只匹配单个"o”,而"o+“匹配所有"o”。

.

匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。

(pattern)

匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果"匹配"集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用"(“或者”)"。

(?:pattern)

匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用"or"字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 ‘industry|industries’ 更经济的表达式。

(?=pattern)

执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,‘Windows (?=95|98|NT|2000)’ 匹配"Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。

(?!pattern)

执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,‘Windows (?!95|98|NT|2000)’ 匹配"Windows 3.1"中的 “Windows”,但不匹配"Windows 2000"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。

x|y

匹配 x 或 y。例如,‘z|food’ 匹配"z"或"food"。‘(z|f)ood’ 匹配"zood"或"food"。

[xyz]

字符集。匹配包含的任一字符。例如,"[abc]“匹配"plain"中的"a”。

[^xyz]

反向字符集。匹配未包含的任何字符。例如,"[^abc]“匹配"plain"中"p”,“l”,“i”,“n”。

[a-z]

字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。

[^a-z]

反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。

\b

匹配一个字边界,即字与空格间的位置。例如,“er\b"匹配"never"中的"er”,但不匹配"verb"中的"er"。

\B

非字边界匹配。“er\B"匹配"verb"中的"er”,但不匹配"never"中的"er"。

\cx

匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是"c"字符本身。

\d

数字字符匹配。等效于 [0-9]。

\D

非数字字符匹配。等效于 [^0-9]。

\f

换页符匹配。等效于 \x0c 和 \cL。

\n

换行符匹配。等效于 \x0a 和 \cJ。

\r

匹配一个回车符。等效于 \x0d 和 \cM。

\s

匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。

\S

匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。

\t

制表符匹配。与 \x09 和 \cI 等效。

\v

垂直制表符匹配。与 \x0b 和 \cK 等效。

\w

匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。

\W

与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。

\xn

匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如,“\x41"匹配"A”。“\x041"与”\x04"&"1"等效。允许在正则表达式中使用 ASCII 代码。

\num

匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。

\n

标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。

\nm

标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 n 和 m 是八进制数字 (0-7)。

\nml

当 n 是八进制数 (0-3),m 和 l 是八进制数 (0-7) 时,匹配八进制转义码 nml。

\un

匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (©)。

字符串字面值 “(hello)” 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 “\(hello\)”。

4. Matcher 类的方法

索引方法

  1. public int start() 返回以前匹配的初始索引。
  2. public int start(int group) 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引
  3. public int end() 返回最后匹配字符之后的偏移量。
  4. public int end(int group) 返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。

查找方法

  1. public boolean lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。
  2. public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。
  3. public boolean find(int start)重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
  4. public boolean matches() 尝试将整个区域与模式匹配。

替换方法

  1. public Matcher appendReplacement(StringBuffer sb, String replacement) 实现非终端添加和替换步骤。
  2. public StringBuffer appendTail(StringBuffer sb) 实现终端添加和替换步骤。
  3. public String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。
  4. public String replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列。
  5. public static String quoteReplacement(String s) 返回指定字符串的字面替换字符串。

start 和 end 方法

//对cat字符串进行计数,读出起始位和结束位
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexMatches
{private static final String REGEX = "\\bcat\\b";private static final String INPUT ="cat cat cat cattie cat";public static void main( String[] args ){Pattern p = Pattern.compile(REGEX);Matcher m = p.matcher(INPUT); // 获取 matcher 对象int count = 0;while(m.find()) {count++;System.out.println("Match number "+count);System.out.println("start(): "+m.start());System.out.println("end(): "+m.end());}}
}

matches 和 lookingAt 方法

匹配一个输入序列;
matches 要求整个序列都匹配;
lookingAt 需要从第一个字符开始匹配

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexMatches
{private static final String REGEX = "foo";private static final String INPUT = "fooooooooooooooooo";private static final String INPUT2 = "ooooofoooooooooooo";private static Pattern pattern;private static Matcher matcher;private static Matcher matcher2;public static void main( String[] args ){pattern = Pattern.compile(REGEX);matcher = pattern.matcher(INPUT);matcher2 = pattern.matcher(INPUT2);System.out.println("Current REGEX is: "+REGEX);System.out.println("Current INPUT is: "+INPUT);System.out.println("Current INPUT2 is: "+INPUT2);System.out.println("lookingAt(): "+matcher.lookingAt());System.out.println("matches(): "+matcher.matches());System.out.println("lookingAt(): "+matcher2.lookingAt());}
}//Current REGEX is: foo
//Current INPUT is: fooooooooooooooooo
//Current INPUT2 is: ooooofoooooooooooo
//lookingAt(): true
//matches(): false
//lookingAt(): false

replaceFirst 和 replaceAll 方法

replaceFirst 和 replaceAll 方法用来替换匹配正则表达式的文本。replaceFirst 替换首次匹配,replaceAll 替换所有匹配。

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexMatches
{private static String REGEX = "dog";private static String INPUT = "The dog says meow. " +"All dogs say meow.";private static String REPLACE = "cat";public static void main(String[] args) {Pattern p = Pattern.compile(REGEX);// get a matcher objectMatcher m = p.matcher(INPUT); INPUT = m.replaceAll(REPLACE);System.out.println(INPUT);}
}

appendReplacement和appendTail方法

Matcher 类也提供了appendReplacement 和 appendTail 方法用于文本替换:

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexMatches
{private static String REGEX = "a*b";private static String INPUT = "aabfooaabfooabfoobkkk";private static String REPLACE = "-";public static void main(String[] args) {Pattern p = Pattern.compile(REGEX);// 获取 matcher 对象Matcher m = p.matcher(INPUT);StringBuffer sb = new StringBuffer();while(m.find()){m.appendReplacement(sb,REPLACE);}m.appendTail(sb);System.out.println(sb.toString());}
}
//-foo-foo-foo-kkk 

PatternSyntaxException 类的方法
PatternSyntaxException 是一个非强制异常类,它指示一个正则表达式模式中的语法错误。

  1. public String getDescription() 获取错误的描述。
  2. public int getIndex() 获取错误的索引。
  3. public String getPattern() 获取错误的正则表达式模式。
  4. public String getMessage() 返回多行字符串,包含语法错误及其索引的描述、错误的正则表达式模式和模式中错误索引的可视化指示。

Java 方法

System.out.println()
调用系统类 System 中的标准输出对象 out 中的方法println()

请添加图片描述
返回值类型 :void方法没有返回值。

1. 定义:

方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用

2. 优点

1.使程序变得更简短而清晰。
2.有利于程序维护。
3.可以提高程序开发的效率。
4.提高了代码的重用性

3. 命名规则

1.驼峰体:首字母小写,连接其他单词时用大写开头;addPen;
2.下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。testPop_emptyStack

4. 方法调用

当方法返回一个值的时候,方法调用通常被当做一个值。 int larger = max(30, 40);

如果方法返回值是void,方法调用一定是一条语句。例如:方法println返回void。

5. 方法的重载

/** 返回两个整型变量数据的较大值 */
public static int max(int num1, int num2) {int result;if (num1 > num2)result = num1;elseresult = num2;return result; 
}
/** 返回两个浮点型变量数据的较大值 */
public static double max(double num1, double num2) {if (num1 > num2)return num1;elsereturn num2;
}

6. 构造方法

和它所在类的名字相同,构造方法没有返回值;

  MyClass() { x = 10;}   //无参构造MyClass(int i ) {x = i;}		//有参构造

7. 可变参数

JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法,在指定参数类型后加一个省略号(…)
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,

public static void printMax( double… numbers)

8. finalize() 方法

在对象被垃圾收集器析构(回收)之前调用,finalize( ),它用来清除回收对象。

一般用在文件被关闭时。

protected void finalize()
{//终结代码
}
public class FinalizationDemo {  public static void main(String[] args) {  Cake c1 = new Cake(1);  Cake c2 = new Cake(2);  Cake c3 = new Cake(3);  c2 = c3 = null;  System.gc(); //调用Java垃圾收集器}  
}  class Cake extends Object {  private int id;  public Cake(int id) {  this.id = id;  System.out.println("Cake Object " + id + "is created");  }  protected void finalize() throws java.lang.Throwable {  super.finalize();  System.out.println("Cake Object " + id + "is disposed");  }  
}
//$ javac FinalizationDemo.java 
//$ java FinalizationDemo
//Cake Object 1is created
//Cake Object 2is created
//Cake Object 3is created
//Cake Object 3is disposed
//Cake Object 2is disposed

在这里欢迎大家的点赞、关注、评论,以此来促进大家互相学习交流,同时可以让新加入的小伙伴更快的了解新知识!!!

以上内容如有侵权,请联系作者进行删除

≧◠◡◠≦ 1分2分都是爱,感谢已经打赏的老板,和正在打赏的老板们 ≧◠◡◠≦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/113043.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FireFox禁用HTTP2

问题 最近需要调试接口&#xff0c;但是&#xff0c;Chrome都是强制使用h2协议&#xff0c;即HTTP/2协议。为了排除h2协议排除对接口调用的影响&#xff0c;需要强制浏览器使用HTTP1协议。 解决 FireFox 设置firefox的network.http.http2.enabled为禁用&#xff0c;这样就禁…

docker与phpstudy两种方式部署wordpress 并 开启伪静态

实际测试&#xff0c;可能是docker内存限制的缘故&#xff0c;docker部署的会比较卡 下载 wordpress phpstudy phpstudy中伪静态配置 伪静态 正常访问 WordPress 文章页的 URL 地址为 http://asa/index.php?p123。变成伪静态就是http://asa/123.html 。 伪静态是相对真实静…

第2章 Linux多进程开发 2.19-2.23 与信号相关的函数

软件中断&#xff1a; 信号名称&#xff08;宏不会变&#xff09;&#xff0c;编号在不同的版本可能会变&#xff1a; core保存进程异常退出的信息&#xff1a; core.c: #include <stdio.h> #include <string.h>int main() {char * buf; // 指针 没有指…

Vector<T> 动态数组(模板语法)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 动态数组 Vector&#xff08;难度1&#xff09; 其中&#xff0c;2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 本文目标 1 学会写基本的C类模板语法&#xff1b; 2 为以后熟练使用 S…

图像分割模型GUI应用:基于Tkinter和MMseg实现

简介 本篇博客介绍了一个使用Python的Tkinter库和MMseg图像分割库创建的图像分割模型GUI应用。该应用允许用户加载图像文件夹&#xff0c;浏览加载的图像&#xff0c;并对选定的图像执行分割推断&#xff0c;展示分割结果。这个应用演示了如何使用图形界面与深度学习模型结合&…

堆,堆排序和TOP—K问题(C语言版)

前言 堆是一种重要的数据结构&#xff0c;堆分为大根堆和小根堆&#xff0c;大根堆堆顶的数据是最大的&#xff0c;小根堆堆顶的数据是最小的&#xff0c;堆在逻辑结构上是一颗完全二叉树&#xff0c;这棵树中如果满足根节点大于左右子树&#xff0c;每个节点都满足这个条件就是…

MybatisPlus插件篇—逻辑删除+p6spy

文章目录 一、前言二、插件1、逻辑删除1.1、官方说明&#xff1a;1.2、配置依赖1.3、配置全局配置1.4、实体类字段上添加TableLogic注解1.5、验证是否成功 2、执行SQL分析打印2.1、配置依赖2.2、数据库驱动配置2.3、spy配置文件配置2.4、注意事项 三、总结提升 一、前言 本文将…

LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

随着大型语言模型&#xff08;LLM&#xff09;&#xff08;如ChatGPT和GPT-4&#xff09;的兴起&#xff0c;现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人&#xff0c;并且可以浏览堆积如山的文档&#xff0c;为您的输入提供准确的响应。 在本系列中&#xf…

java八股文面试[数据库]——数据库三范式

什么是范式&#xff1f; 范式是数据库设计时遵循的一种规范&#xff0c;不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF)&#xff1a;属性不可分割&#xff0c;即每个属性都是不可分割的原子项。(实体的属性即表中的列) 理解&#xff1a;一个列不能包含两个数…

【GO】LGTM_Grafana_Tempo(2)_官方用例改后实操

最近在尝试用 LGTM 来实现 Go 微服务的可观测性&#xff0c;就顺便整理一下文档。 Tempo 会分为 4 篇文章&#xff1a; Tempo 的架构官网测试实操跑通gin 框架发送 trace 数据到 tempogo-zero 微服务框架使用发送数据到 tempo 根据官方文档实操跑起来 tempo&#xff0c;中间根…

网络编程 day 4

1、多进程并发服务器根据流程图重新编写 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.11…

渲染如何做到超强渲染?MAX插件CG MAGIC中的渲染功能!

渲染工作应该算是设计师的日常工作流程中最重要的环节之一了。如果渲染速度加快&#xff0c;可能是要看渲染技巧掌握的有多少了。 大家熟悉的3d Max本地渲染通道&#xff0c;对于CG MAGIC渲染功能你也一定不能错过&#xff0c;要知道操作简单易使用&#xff0c;就完全拿捏了效率…

微信小程序echart导出图片

echarts版本5.1.0 用到的echarts组件是uni插件市场的echart组件 <div style"overflow: hidden;"><dCanvas class"uni-ec-canvass" id"uni-ec-canvas" ref"canvas" canvas-id"mychart-gauge" :ec"ec"&g…

基于Thinkphp6框架全新UI的AI网址导航系统源码

2023全新UI的AI网址导航系统源码&#xff0c;基于thinkphp6框架开发的 AI 网址导航是一个非常实用的工具&#xff0c;它能够帮助用户方便地浏览和管理自己喜欢的网站。 相比于其他的 AI 网址导航&#xff0c;这个项目使用了更加友好和易用的 ThinkPHP 框架进行搭建&#xff0c;…

1. Spatial Intelligence of a Self-driving Car and Rule-Based Decision Making

主要内容 本文主要介绍了一些基于规则的方法&#xff0c;以实现自动驾驶规划技术在复杂车流中取得人类驾驶效果。因此此类场景更适合城市NOA。 当然本文在城市道路&#xff0c;封闭区域道路以及城际高速都适宜。主要技术点 &#xff08;1&#xff09;本文把自车周围车辆的决策…

webpack loader和plugins的区别

在Webpack中&#xff0c;Loader和Plugin是两个不同的概念&#xff0c;用于不同的目的。 Loader是用于处理非JavaScript模块的文件的转换工具。它们将文件作为输入&#xff0c;并将其转换为Webpack可以处理的模块。例如&#xff0c;当您在Webpack配置中使用Babel Loader时&…

【STM32】学习笔记(OLED)-江科大

调试方式 OLED简介 硬件电路 驱动函数 OLED.H #ifndef __OLED_H #define __OLED_Hvoid OLED_Init(void); void OLED_Clear(void); void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); void OL…

qt设计界面

widget.h #ifndef WIDGET_H #define WIDGET_H //防止文件重复包含#include <QWidget> //QWidget类所在的头文件&#xff0c;父类头文件 #include<QIcon> #include<QPushButton> …

理论转换实践之keepalived+nginx实现HA

背景&#xff1a; keepalivednginx实现ha是网站和应用服务器常用的方法&#xff0c;之前项目中单独用nginx实现过负载均衡和服务转发&#xff0c;keepalived一直停留在理论节点&#xff0c;加之最近工作编写的一个技术文档用到keepalived&#xff0c;于是便有了下文。 服务组件…

使用Gitea自建仓库 并配置git上传

使用Gitea自建仓库 并配置git上传 使用 Docker 安装 | Gitea Documentation 1. 安装Docker 2. 使用Docker Compose快速安装 在安装目录下创建config 和 data两个文件夹 以下是我的配置&#xff0c;和官网提供的大差不差 version: "3"networks:gitea:external: …