Groovy 正则表达式和异常处理
1.正则表达式
定义:正则表达式是用于在文本中查找子字符串的模式。 Groovy使用〜“regex”表达式本地支持正则表达式。引号中包含的文本表示用于比较的表达式。
例子:
def regex = ~'Groovy'
正则表达式用到的特殊字符:
1.有两个特殊的位置字符用于表示一行的开始和结束:caret(∧)和美元符号($)。
2.正则表达式也可以包括量词。加号(+)表示一次或多次,应用于表达式的前一个元素。星号(*)用于表示零个或多个出现。问号(?)表示零或一次。
3.元字符{和}用于匹配前一个字符的特定数量的实例。
4.在正则表达式中,句点符号(。)可以表示任何字符。这被描述为通配符。
5.正则表达式可以包括字符类。一组字符可以作为简单的字符序列,包含在元字符[和]中,如[aeiou]中。
对于字母或数字范围,可以使用[a-z]或[a-mA-M]中的短划线分隔符。
字符类的补码由方括号内的前导插入符号表示,如[∧a-z]中所示,并表示除指定的字符以外的所有字符。
2.正则表达式也可以包括量词。加号(+)表示一次或多次,应用于表达式的前一个元素。星号(*)用于表示零个或多个出现。问号(?)表示零或一次。
3.元字符{和}用于匹配前一个字符的特定数量的实例。
4.在正则表达式中,句点符号(。)可以表示任何字符。这被描述为通配符。
5.正则表达式可以包括字符类。一组字符可以作为简单的字符序列,包含在元字符[和]中,如[aeiou]中。
对于字母或数字范围,可以使用[a-z]或[a-mA-M]中的短划线分隔符。
字符类的补码由方括号内的前导插入符号表示,如[∧a-z]中所示,并表示除指定的字符以外的所有字符。
下面给出了正则表达式的一些示例。
'Groovy' =~ 'Groovy'
'Groovy' =~ 'oo'
'Groovy' ==~ 'Groovy'
'Groovy' ==~ 'oo'
'Groovy' =~ '∧G'
'Groovy' =~ 'G$'
'Groovy' =~ 'Gro*vy' 'Groovy' =~ 'Gro{2}vy'
'Groovy' =~ 'Groovy'
'Groovy' =~ 'oo'
'Groovy' ==~ 'Groovy'
'Groovy' ==~ 'oo'
'Groovy' =~ '∧G'
'Groovy' =~ 'G$'
'Groovy' =~ 'Gro*vy' 'Groovy' =~ 'Gro{2}vy'
2.异常处理
定义:任何编程语言都需要异常处理来处理运行时错误,从而可以保持应用程序的正常流程。异常通常会破坏应用程序的正常流程,这就是为什么我们需要在我们的应用程序中使用异常处理的原因。
类别:扩展Throwable类(除了RuntimeException和Error)的类称为检查异常egIOException,SQLException等。检查的异常在编译时检查
1.常见的运行时异常(也称未经检查的异常):java.io.FileNotFoundException(系统找不到指定文件),(1 / 0)ArithmeticException算术操作异常,NullPointerException(空指针异常),ArrayIndexOutOfBoundsException(数组下标越界)
2.错误,错误是无法恢复的,会导致程序奔溃,下面是几个例子
1.OutOfMemoryError(内存溢出) --可以参考java的解决方式:https://blog.csdn.net/z453588/article/details/83743837
2.VirtualMachineError(虚拟机内部错误)--这个分类很多内存,堆(Stack)都有可能出错,参考:https://blog.csdn.net/javarrr/article/details/86681842
3.AssertionError (使用断言时报错)--参考:https://www.cnblogs.com/Hebe-Huang/p/7482188.html
3.结构示意图
异常捕捉:
1.方法使用try和catch关键字的组合捕获异常。 try / catch块放置在可能生成异常的代码周围。
例子:
try {
//Protected code
} catch(ExceptionName e1) {
//Catch block
}
//Protected code
} catch(ExceptionName e1) {
//Catch block
}
2.多个捕获块
try {
def arr = new int[3];
arr[5] = 5;
}catch(ArrayIndexOutOfBoundsException ex) {
println("Catching the Array out of Bounds exception");
}catch(Exception ex) {
println("Catching the exception");
}
def arr = new int[3];
arr[5] = 5;
}catch(ArrayIndexOutOfBoundsException ex) {
println("Catching the Array out of Bounds exception");
}catch(Exception ex) {
println("Catching the exception");
}
3.finally块
finally块跟在try块或catch块之后。代码的finally块总是执行,而不管异常的发生。
例子:
try {
//Protected code
} catch(ExceptionType1 e1) {
//Catch block
} catch(ExceptionType2 e2) {
//Catch block
} catch(ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}
//Protected code
} catch(ExceptionType1 e1) {
//Catch block
} catch(ExceptionType2 e2) {
//Catch block
} catch(ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}
4.常见的异常方式
(1)public String getMessage()
返回有关已发生异常的详细消息。此消息在Throwable构造函数中初始化。
(2)public Throwable getCause()
返回由Throwable对象表示的异常原因。
(3)public String toString()
返回与getMessage()的结果连接的类的名称。
(4)public void printStackTrace()
将toString()的结果与堆栈跟踪一起打印到System.err,错误输出流。
(5)public StackTraceElement [] getStackTrace()
返回包含堆栈跟踪上的每个元素的数组。索引0处的元素表示调用堆栈的顶部,数组中的最后一个元素表示调用堆栈底部的方法。
(6)public Throwable fillInStackTrace()
使用当前堆栈跟踪填充此Throwable对象的堆栈跟踪,添加到堆栈跟踪中的任何以前的信息。
返回有关已发生异常的详细消息。此消息在Throwable构造函数中初始化。
(2)public Throwable getCause()
返回由Throwable对象表示的异常原因。
(3)public String toString()
返回与getMessage()的结果连接的类的名称。
(4)public void printStackTrace()
将toString()的结果与堆栈跟踪一起打印到System.err,错误输出流。
(5)public StackTraceElement [] getStackTrace()
返回包含堆栈跟踪上的每个元素的数组。索引0处的元素表示调用堆栈的顶部,数组中的最后一个元素表示调用堆栈底部的方法。
(6)public Throwable fillInStackTrace()
使用当前堆栈跟踪填充此Throwable对象的堆栈跟踪,添加到堆栈跟踪中的任何以前的信息。