什么是正则表达式以及在Java1.4中的应用

深入java 定义正则表达式 这篇文章总结java1.4之后加入的正则表达式,总结他的使用。更多的源代码请访问我的github:https://github.com/yangsheng20080808/deepIntoJava本文分为3大部分 正则表达式的通用定义规则 正则表达式定义的例子 附加常用的匹配例子 正则表达式的通用定义规则使用正则表达式我们只要关心一个类即可:java.util.regex.Pattern 摘抄自官 阅读详情
这里使用PHP来引起下面的内容:

一个正则表达式是一个特定的格式化模式,可以用来找出一个字符串在另一个字符串中的使用情况。几个编程语言,包括Visual Basic,Perl,JavaScript和PHP都支持正则表达式,希望在这篇入门指导的结束,Mitchell(作者自己)可以让你在PHP程序中能应用一些基本的正则表达式。正则表达式是在各种各样的程序语言中突出的古怪特征中的一种,但是由于它们看起来是很难的一个概念,所以很多开发者就把它们放到了角落里,忘记了它们的存在。

让我们先来看看什么是正则表达式,为什么你要在PHP程序中用到它们。

什么是正则表达式?

你对从一个不错的老的基于控制的文本编辑器中分离出像BBEdit和notepad的程序,有什么看法呢?两个都支持文本输入,可以让你保存文本到文件中,但是现在的文本编辑器也支持其它功能,包括查找–代替工具,这让编辑一个文本文件相当容易。
正则表达式也是相似的,只是更好一些。正则表达式可以被认为一个极其高级的查找-替换工具,让我们从痛苦中摆脱出来:不必再写定制的数据确认例子来检查电子邮件地址或者来确认电话号码的格式是正确的,如此等等。
任何程序中最普通的函数之一就是数据有效性检查,PHP捆绑了一些文本检查函数,允许我们用正则表达式匹配一个字符串,确认有一个空格,有一个问号,等等。
你不知道的可能是,正则表达式可以简单装备吗,当你掌握了一些正则表达式时(这个正则表达式可以用来告诉正则表达式引擎一个字符串中我们想要匹配的部分),你会自问为什么会把正则表达式扔到角落里这么久,^_^。
PHP有两套函数,用来处理两种类型的正则表达式:Perl5兼容模式,和Posix标准兼容模式。在这篇文章中我们将看看ereg函数,用遵照Posix标准的搜索表达式工作。虽然它们并没有Perl5模式那样强大,但是一种不错的学习正则表达式的方法。如果你对PHP支持的Perl5兼容正则表达式感兴趣,可以到PHP.net网站找一些关于preg函数的细节。
PHP有六个函数来处理正则表达式,它们都把一个正则表达式作为它们的第一个参数,列出如下:

ereg: 最常用的正则表达式函数, ereg 允许我们搜索跟一个正则表达式匹配的一个字符串.
ereg_replace: 允许我们搜索跟正则表达式匹配的一个字符串,并用新的字符串代替所有这个表达式出现的地方。
eregi: 和ereg几乎是一样效果,不过忽略大小写。
eregi_replace: 和ereg_replace有着一样的搜索-替换功能,不过忽略大小写.
split: 允许我们搜索和正则表达式匹配的字符串,并且以字符串集合的方式返回匹配结果.
spliti: split函数忽略大小写的版本.
为什么使用正则表达式?

如果你不断地建立不同的函数来检查或者操作字符串的一部分,现在你可能要放弃所有的这些函数,取而代之的用正则表达式。如果你对下列的问题都答“是的”,那么你肯定要考虑使用正则表达式了:

你是否正在写一些定制的函数来检查表单数据(比如在电子信箱地址中的一个@,一个点)?
你是否写一些定制的函数,在一个字符串中循环每个字符,如果这个字符匹配了一个特定特征(比如它是大写的,或者它是一个空格),那么就替换它?
除了是令人不舒服的字符串检查和操作方法,如果没有有效率地写代码,上述的两条也会使你的程序慢下来。你是否更倾向于用下面的代码检查一个电子信箱地址呢:

综上所述:正则表达式使我们在代码编辑中,不用抒写复杂的函数来定制输入信息,比如我们需要判断text中是否输入的为电子邮件。古老的方式,是编写一个定制函数来读取这个String Text,而通过使用正则表达式这种模式将大量节省代码!

PHP中比较应用:

<?php
function validateEmail($email)
{
$hasAtSymbol = strpos($email, "@");
$hasDot = strpos($email, ".");
if($hasAtSymbol && $hasDot)
return true;
else
return false;
}
echo validateEmail("mitchell@devarticles.com");
?>
... 或者使用下面的代码:

<?php
function validateEmail($email)
{
return ereg("^[a-zA-Z]+@[a-zA-Z]+/.[a-zA-Z]+$", $email);
}
echo validateEmail("mitchell@devarticles.com");
?>
第一个中使用到function函数来进行验证,而下面的例子则用到正则表达库函数

下面看看正则表达式在J2EE中的应用

现在JDK1.4里终于有了自己的正则表达式API包,JAVA程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下这个SUN提供的迟来恩物- -对我来说确实如此。 
1.简介:  
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。 

它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。  
Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。 

以下我们就分别来看看这两个类: 

2.Pattern类:  
Pattern的方法如下: static Pattern compile(String regex) 
将给定的正则表达式编译并赋予给Pattern类  
static Pattern compile(String regex, int flags) 
同上,但增加flag参数的指定,可选的flag参数包括:CASE INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE, CANON EQ  
int flags() 
返回当前Pattern的匹配flag参数.  
Matcher matcher(CharSequence input) 
生成一个给定命名的Matcher对象  
static boolean matches(String regex, CharSequence input) 
编译给定的正则表达式并且对输入的字串以该正则表达式为模开展匹配,该方法适合于该正则表达式只会使用一次的情况,也就是只进行一次匹配工作,因为这种情况下并不需要生成一个Matcher实例。   
String pattern() 
返回该Patter对象所编译的正则表达式。  
String[] split(CharSequence input) 
将目标字符串按照Pattern里所包含的正则表达式为模进行分割。  
String[] split(CharSequence input, int limit) 
作用同上,增加参数limit目的在于要指定分割的段数,如将limi设为2,那么目标字符串将根据正则表达式分为割为两段。  


一个正则表达式,也就是一串有特定意义的字符,必须首先要编译成为一个Pattern类的实例,这个Pattern对象将会使用matcher()方法来生成一个Matcher实例,接着便可以使用该 Matcher实例以编译的正则表达式为基础对目标字符串进行匹配工作,多个Matcher是可以共用一个Pattern对象的。 

现在我们先来看一个简单的例子,再通过分析它来了解怎样生成一个Pattern对象并且编译一个正则表达式,最后根据这个正则表达式将目标字符串进行分割:  
import java.util.regex.*; 
public class Replacement{ 
      public static void main(String[] args) throws Exception { 
        // 生成一个Pattern,同时编译一个正则表达式 
        Pattern p = Pattern.compile("[/]+"); 
        //用Pattern的split()方法把字符串按"/"分割 
        String[] result = p.split( 
"Kevin has seen《LEON》seveal times,because it is a good film." 
+"/ 凯文已经看过《这个杀手不太冷》几次了,因为它是一部" 
+"好电影。/名词:凯文。"); 
        for (int i=0; i<result.length; i++) 
System.out.println(result[i]); 
} 
} 




输出结果为: 

Kevin has seen《LEON》seveal times,because it is a good film. 
凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。 
名词:凯文。 

很明显,该程序将字符串按"/"进行了分段,我们以下再使用 split(CharSequence input, int limit)方法来指定分段的段数,程序改动为: 
tring[] result = p.split("Kevin has seen《LEON》seveal times,because it is a good film./ 凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。/名词:凯文。",2); 

这里面的参数"2"表明将目标语句分为两段。 

输出结果则为: 

Kevin has seen《LEON》seveal times,because it is a good film. 
凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。/名词:凯文。 

由上面的例子,我们可以比较出java.util.regex包在构造Pattern对象以及编译指定的正则表达式的实现手法与我们在上一篇中所介绍的Jakarta-ORO 包在完成同样工作时的差别,Jakarta-ORO 包要先构造一个PatternCompiler类对象接着生成一个Pattern对象,再将正则表达式用该PatternCompiler类的compile()方法来将所需的正则表达式编译赋予Pattern类: 

PatternCompiler orocom=new Perl5Compiler(); 

Pattern pattern=orocom.compile("REGULAR EXPRESSIONS"); 

PatternMatcher matcher=new Perl5Matcher(); 

但是在java.util.regex包里,我们仅需生成一个Pattern类,直接使用它的compile()方法就可以达到同样的效果: 
Pattern p = Pattern.compile("[/]+"); 

因此似乎java.util.regex的构造法比Jakarta-ORO更为简洁并容易理解。 

3.Matcher类: 
Matcher方法如下: Matcher appendReplacement(StringBuffer sb, String replacement) 
将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。 
StringBuffer appendTail(StringBuffer sb) 
将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。 
int end() 
返回当前匹配的子串的最后一个字符在原目标字符串中的索引位置 。 
int end(int group) 
返回与匹配模式里指定的组相匹配的子串最后一个字符的位置。 
boolean find() 
尝试在目标字符串里查找下一个匹配子串。 
boolean find(int start) 
重设Matcher对象,并且尝试在目标字符串里从指定的位置开始查找下一个匹配的子串。 
String group() 
返回当前查找而获得的与组匹配的所有子串内容 
String group(int group) 
返回当前查找而获得的与指定的组匹配的子串内容 
int groupCount() 
返回当前查找所获得的匹配组的数量。 
boolean lookingAt() 
检测目标字符串是否以匹配的子串起始。 
boolean matches() 
尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值。 
Pattern pattern() 
返回该Matcher对象的现有匹配模式,也就是对应的Pattern 对象。 
String replaceAll(String replacement) 
将目标字符串里与既有模式相匹配的子串全部替换为指定的字符串。 
String replaceFirst(String replacement) 
将目标字符串里第一个与既有模式相匹配的子串替换为指定的字符串。 
Matcher reset() 
重设该Matcher对象。 
Matcher reset(CharSequence input) 
重设该Matcher对象并且指定一个新的目标字符串。 
int start() 
返回当前查找所获子串的开始字符在原目标字符串中的位置。 
int start(int group) 
返回当前查找所获得的和指定组匹配的子串的第一个字符在原目标字符串中的位置。 


(光看方法的解释是不是很不好理解?不要急,待会结合例子就比较容易明白了) 

一个Matcher实例是被用来对目标字符串进行基于既有模式(也就是一个给定的Pattern所编译的正则表达式)进行匹配查找的,所有往Matcher的输入都是通过CharSequence接口提供的,这样做的目的在于可以支持对从多元化的数据源所提供的数据进行匹配工作。 

我们分别来看看各方法的使用: 

★matches()/lookingAt ()/find(): 
一个Matcher对象是由一个Pattern对象调用其matcher()方法而生成的,一旦该Matcher对象生成,它就可以进行三种不同的匹配查找操作: 

matches()方法尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值。 
lookingAt ()方法将检测目标字符串是否以匹配的子串起始。 
find()方法尝试在目标字符串里查找下一个匹配子串。 

以上三个方法都将返回一个布尔值来表明成功与否。 

★replaceAll ()/appendReplacement()/appendTail(): 
Matcher类同时提供了四个将匹配子串替换成指定字符串的方法: 

replaceAll() 
replaceFirst() 
appendReplacement() 
appendTail() 

replaceAll()与replaceFirst()的用法都比较简单,请看上面方法的解释。我们主要重点了解一下appendReplacement()和appendTail()方法。 

appendReplacement(StringBuffer sb, String replacement) 将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里,而appendTail(StringBuffer sb) 方法则将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。 

例如,有字符串fatcatfatcatfat,假设既有正则表达式模式为"cat",第一次匹配后调用appendReplacement(sb,"dog"),那么这时StringBuffer sb的内容为fatdog,也就是fatcat中的cat被替换为dog并且与匹配子串前的内容加到sb里,而第二次匹配后调用appendReplacement(sb,"dog"),那么sb的内容就变为fatdogfatdog,如果最后再调用一次appendTail(sb),那么sb最终的内容将是fatdogfatdogfat。 

还是有点模糊?那么我们来看个简单的程序: 
//该例将把句子里的"Kelvin"改为"Kevin" 
import java.util.regex.*; 
public class MatcherTest{ 
public static void main(String[] args) 
throws Exception { 
//生成Pattern对象并且编译一个简单的正则表达式"Kelvin" 
Pattern p = Pattern.compile("Kevin"); 
//用Pattern类的matcher()方法生成一个Matcher对象 
Matcher m = p.matcher("Kelvin Li and Kelvin Chan are both working in Kelvin Chen's KelvinSoftShop company"); 
StringBuffer sb = new StringBuffer(); 
int i=0; 
//使用find()方法查找第一个匹配的对象 
boolean result = m.find(); 
//使用循环将句子里所有的kelvin找出并替换再将内容加到sb里 
while(result) { 
i++; 
m.appendReplacement(sb, "Kevin"); 
System.out.println("第"+i+"次匹配后sb的内容是:"+sb); 
//继续查找下一个匹配对象 
result = m.find(); 
} 
//最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里; 
m.appendTail(sb); 
System.out.println("调用m.appendTail(sb)后sb的最终内容是:"+ sb.toString()); 
} 
} 



最终输出结果为: 
第1次匹配后sb的内容是:Kevin 
第2次匹配后sb的内容是:Kevin Li and Kevin 
第3次匹配后sb的内容是:Kevin Li and Kevin Chan are both working in Kevin 
第4次匹配后sb的内容是:Kevin Li and Kevin Chan are both working in Kevin Chen's Kevin 
调用m.appendTail(sb)后sb的最终内容是:Kevin Li and Kevin Chan are both working in Kevin Chen's KevinSoftShop company. 

看了上面这个例程是否对appendReplacement(),appendTail()两个方法的使用更清楚呢,如果还是不太肯定最好自己动手写几行代码测试一下。 

★group()/group(int group)/groupCount(): 
该系列方法与我们在上篇介绍的Jakarta-ORO中的MatchResult .group()方法类似(有关Jakarta-ORO请参考上篇的内容),都是要返回与组匹配的子串内容,下面代码将很好解释其用法: 
import java.util.regex.*; 

public class GroupTest{ 
public static void main(String[] args) 
throws Exception { 
Pattern p = Pattern.compile("(ca)(t)"); 
Matcher m = p.matcher("one cat,two cats in the yard"); 
StringBuffer sb = new StringBuffer(); 
boolean result = m.find(); 
System.out.println("该次查找获得匹配组的数量为:"+m.groupCount()); 
for(int i=1;i<=m.groupCount();i++){ 
System.out.println("第"+i+"组的子串内容为: "+m.group(i)); 
} 
} 
} 



输出为: 
该次查找获得匹配组的数量为:2 
第1组的子串内容为:ca 
第2组的子串内容为:t 

Matcher对象的其他方法因比较好理解且由于篇幅有限,请读者自己编程验证。 

4.一个检验Email地址的小程序: 
最后我们来看一个检验Email地址的例程,该程序是用来检验一个输入的EMAIL地址里所包含的字符是否合法,虽然这不是一个完整的EMAIL地址检验程序,它不能检验所有可能出现的情况,但在必要时您可以在其基础上增加所需功能。 
import java.util.regex.*; 
public class Email { 
public static void main(String[] args) throws Exception { 
String input = args[0]; 
//检测输入的EMAIL地址是否以 非法符号"."或"@"作为起始字符 
Pattern p = Pattern.compile("^//.|^//@"); 
Matcher m = p.matcher(input); 
if (m.find()){ 
System.err.println("EMAIL地址不能以'.'或'@'作为起始字符"); 
} 
//检测是否以"www."为起始 
p = Pattern.compile("^www//."); 
m = p.matcher(input); 
if (m.find()) { 
System.out.println("EMAIL地址不能以'www.'起始"); 
} 
//检测是否包含非法字符 
p = Pattern.compile("[^A-Za-z0-9//.//@_//-~#]+"); 
m = p.matcher(input); 
StringBuffer sb = new StringBuffer(); 
boolean result = m.find(); 
boolean deletedIllegalChars = false; 
while(result) { 
//如果找到了非法字符那么就设下标记 
deletedIllegalChars = true; 
//如果里面包含非法字符如冒号双引号等,那么就把他们消去,加到SB里面 
m.appendReplacement(sb, ""); 
result = m.find(); 
} 
m.appendTail(sb); 
input = sb.toString(); 
if (deletedIllegalChars) { 
System.out.println("输入的EMAIL地址里包含有冒号、逗号等非法字符,请修改"); 
System.out.println("您现在的输入为: "+args[0]); 
System.out.println("修改后合法的地址应类似: "+input); 
} 
} 
} 



例如,我们在命令行输入:java Email www.kevin@163.net 

那么输出结果将会是:EMAIL地址不能以'www.'起始 

如果输入的EMAIL为@kevin@163.net 

则输出为:EMAIL地址不能以'.'或'@'作为起始字符 

当输入为:cgjmail#$%@163.net 

那么输出就是: 

输入的EMAIL地址里包含有冒号、逗号等非法字符,请修改 
您现在的输入为: cgjmail#$%@163.net 
修改后合法的地址应类似: cgjmail@163.net 

5.总结: 
本文介绍了jdk1.4.0-beta3里正则表达式库--java.util.regex中的类以及其方法,如果结合与上一篇中所介绍的Jakarta-ORO API作比较,读者会更容易掌握该API的使用,当然该库的性能将在未来的日子里不断扩展,希望获得最新信息的读者最好到及时到SUN的网站去了解。 

6.结束语: 
本来计划再多写一篇介绍一下需付费的正则表达式库中较具代表性的作品,但觉得既然有了免费且优秀的正则表达式库可以使用,何必还要去找需付费的呢,相信很多读者也是这么想的:,所以有兴趣了解更多其他的第三方正则表达式库的朋友可以自己到网上查找或者到我在参考资料里提供的网址去看看。

【Java编程十五讲】第八讲:正则表达式 #第八讲 正则表达式 正则表达式(regular expression)定义了一种文本搜索模式。正则表达式在文本的搜索编辑的场景中很有用处。 正则表达式并不是在Java中首次出现的,可以说很久以前就出现了。19世纪50年代,由美国数学家Stephen Cole Kleene提出,后来随着UNIX的普及,它从左往右逐个字符扫描文本,找到匹配的模式,继续往下扫描,模式可以使用一次或者多次。JDK 1.4版本开始支持了。 实际上,我们不用编写程序就在使用正则表达式了。一个例子就是在命令窗口执行命令“dir *.t 阅读详情

相关推荐

STM32-DAC定时器触发三角波生成【频率与幅度精准控制】

本文详细介绍了STM32 DAC定时器触发三角波生成的原理与实现方法,涵盖硬件配置、频率与幅度精准控制技巧及代码实现。通过定时器触发DAC模块,可灵活调节三角波的频率和幅度,适用于信号发生器等高精度应用场景。

weixin_29161785的博客 452

jdk1.4的正则表达式使用介绍

 sun终于在sdk正式支持正则表达的判定--java1.4的util里增加了个regex包。  (正则的咚咚,Unix用户都应该比较熟悉。)  大家不用到处找第三方的库或是自己写字符串的判定逻辑了。真算是我们的福音。  只需要将注意力放在业务规则上就可以了。复用和正确性都会有很大的提高,逻辑也简单易懂,容易维护。  在日常的字符串操作方面,会带来很大的方便,比如判断电子邮件地址,电话号码,身份证

JAVA|J2EE|J2ME|JDK|JSP 520

Dify社区版多工作空间功能解锁:源码修改与多租户架构解析

多租户架构是现代SaaS平台实现数据隔离与资源管理的核心技术,其核心原理是通过租户模型将用户、应用和数据在逻辑上隔离。在AI应用开发平台中,这种架构能有效支持多团队、多项目并行开发,确保不同业务线的数据安全与独立迭代。Dify作为开源AI应用构建平台,其底层已设计完善的多租户模型,但社区版默认限制了单用户单工作空间。本文通过精准修改两处关键代码——账户初始化逻辑与系统功能开关,释放了平台固有的多工作空间管理能力。该方案无需改动数据库结构,直接利用现有RBAC权限体系,实现了类似企业版的**多租户隔离**体验

weixin_27059669的博客 1058

Java正则表达式

  在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。  可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛。 

4194

Seedance 2.5本地部署指南:AI生图与视频生成的完整实践

最近在AI生成内容领域,本地部署方案越来越受到开发者关注。特别是Seedance 2.5的发布,让很多原本依赖云端服务的用户开始转向本地化解决方案。本文将从实际使用角度出发,完整介绍Seedance 2.5的本地部署流程、功能特性对比以及实际应用技巧。 1. Seedance 2.5核心特性解析 1.1 什么是Seedance 2.5 Seedance 2.5是一款开源的AI生图和视频生成工具,支持在本地环境运行,无需联网即可实现高质量的图像和视频生成。相比之前的2.0版本,2.5在生成质量、运行效率和功能

weixin_42566121的博客 1672

视觉Transformer实战 | Vision Transformer(ViT)详解与实现

在计算机视觉领域,卷积神经网络 (CNN) 长期以来一直是处理图像任务的主流架构。然而,随着 Transformer 在自然语言处理领域的巨大成功,研究人员开始探索将这种基于自注意力机制的架构应用于视觉任务。Vision Transformer (ViT) 是这一探索的重要里程碑,它首次证明了纯 Transformer 架构在图像分类任务上可以超越最先进的 CNN 模型。本文将详细介绍 ViT 的技术原理,并使用 PyTorch 从零开始构建 ViT 模型用于图像分类任务。

盼小辉丶的博客 4万+

java 正则表达式

(PS:这篇文章为转载,我不喜欢转载的但我觉得这篇文章实在是超赞了,就转了过来,这篇可以说是学习JAVA正则表达的必读篇。作者是个正真有功力的人,阅读愉快)   在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。   可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则

gamintsai的专栏 578

YOLO11改进策略【独家融合改进】| EfficientViMBlock + LGAG + DySample

通过学习采样来学习上采样DySample。

Limiiiing的博客 362

正则表达式讲解与示例

正则表达式 简介 正则表达式最早是在Linux下发展起来的,但是由于其使用方便,在JDK 1.4的时候将其正式引入到了Java的开发行列之中,而在JDK 1.4之前如果要想使用正则表达式,那么需要单独配置一个Apache的开发包,而JDK 1.4之后除了引入了正则的支持之外,同时也对String类进行了一些修改,可以让其直接操作正则。 在JDK 1.4之后专门引入了一个java.util.reg...

菜鸡也有大佬梦 716

电子电气架构 --- 整车电源管理

保证启动能力:防止因电池电量耗尽而导致的车辆无法启动,这对于确保车辆在任何时候都能可靠运行至关重要。 延长电池寿命:通过避免电池深度放电,有助于延长其使用寿命,减少更换电池的需求和成本。 提升用户体验:虽然负载被关闭可能会暂时影响舒适度,但通过在必要时自动采取行动,可以减少驾驶员的焦虑和不确定性,提高整体的用户满意度。

Soly_kun的博客 1083

基于MATLAB的最大重叠离散小波变换(MODWT)算法详解

最大重叠离散小波变换(Maximal Overlap Discrete Wavelet Transform, MODWT)是DWT的重要改进形式,由Percival和Walden等人在20世纪90年代系统提出并完善。MODWT通过消除下采样操作,采用样本平移不变的分解方式,解决了DWT的多个固有缺陷。MODWT的核心创新在于取消下采样环节。与DWT每级分解后对滤波输出进行二分下采样不同,MODWT在每一级都使用相同的滤波器,但通过插入零值的方式调整滤波器系数,保持每级系数数量与原始信号相同。

qq_42212808的博客 115

JAVA正则表达式--PATTERN和MATCHER

JAVA正则表达式--PATTERN和MATCHER现在JDK1.4里终于有了自己的正则表达式API包,JAVA程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下这个SUN提供的迟来恩物- -对我来说确实如此。1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Patter

1134

YOLOv8 改进:使用 MobileNetV3 轻量化架构改进特征提取网络

通过使用 MobileNetV3 作为 YOLOv8 的特征提取器,能够显著降低模型复杂度和运行时资源消耗,同时在一定程度上保持检测精度。这种方法特别适合需要高效计算的边缘设备和嵌入式系统。

走向CTO的路上... 1275

(4)Java基础类库之正则表达式

​ 现在假设有一个字符串需要你判断字符串是否由数字组成,如果由数字组成则将变为数字进行乘法运算。​ 实际上这种验证得功能是非常简单的,但是如此简单的程序却需要开发者编写大量程序逻辑代码,那么如果是更加复杂的验证呢?那么在这样的情况下,对于验证来讲最好的做法就是利用正则表达式来完成。

keep coding!! 394

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA正则表达式 Pattern和Matcher

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。  它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。  Matcher 一个Matcher对象是一个状态

qq_34378183的博客 648

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java正则表达式

转自:http://publishblog.blogchina.com/blog/tb.b?diaryID=4869627 正则表达式 作为本章的结尾,我们来看一看正则表达式(regular expression)。正则表达式是JDK 1.4的新功能,但是对sed和awk这样的Unix的标准实用工具,以及Python,Perl之类的语言来讲,它早就已经成为其不可或缺的组成部分了(有人甚至...

weixin_30344795的博客 77

java 正则 点,JAVA中正则表达式总结

JAVA中正则表达式总结昨天,我的朋友请教我正则表达式。我也好久没有写过正则表达式了,昨天刚好看了下如鹏网创始人杨中科老师关于正则表达式的讲解。使我加深了正则表达式的印像。现我把他总结下:许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。所以JAVA语言也不例外。正则表达式已经超出了...

weixin_39727976的博客 264

MLDN学习笔记 —— 正则表达式

正则表达式在开发中使用较多,JDK 1.4之后java融合了正则技术,并且更新了String类,可以进行更好的开发。希望这份笔记对大家有用,而且这份笔记不光可以使用在java上,只要是正则的应用范围都可以。...

iteye_16360的博客 125
上一篇: 12条守则:让你成功创业当老板
下一篇: Struts标签-Logic
victorWu在日本
博客等级 码龄21年 56粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值