星尘linger个人页面-阿里云开发者社区

个人头像照片 星尘linger TA的个人档案
个人头像照片

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:
云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
  • 高分内容
  • 最新动态
  • 文章
  • 问答
  • 回答了问题 2020-01-15

    【hi聊】2020新年展望:get程序员过年的正确姿势

    二姑妈:你这几年在外面是做什么工作的呀? 我:我是做开发的的。 二姑妈:什么开发? 我:计算机 二姑妈:我家里的电脑坏了,帮忙看看是什么问题 我:。。。

正在加载, 请稍后...
暂无更多信息

2020年04月

  • 04.13 13:54:39
    回答了问题 2020-04-13 13:54:39

    Java为何要使用线程池?

    "系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。 与数据库连接池类似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或Callable对象传给线程池,线程池就会启动一个线程来执行它们的run()或call()方法,当run()或call()方法执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个Runnable对象的run()或call()方法。 除此之外,使用线程池可以有效地控制系统中并发线程的数量,当系统中包含大量并发线程时,会导致系统性能剧烈下降,甚至导致JVM崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过此数。"

    踩0 评论0
  • 04.13 13:54:00
    回答了问题 2020-04-13 13:54:00

    Java JVM垃圾回收机制策略有哪些?

    Java JVM垃圾回收机制策略有四种:标记清除算法、复制算法、标记压缩算法和分代算法。

    踩0 评论0
  • 04.13 13:52:46
    回答了问题 2020-04-13 13:52:46

    Java JVM中垃圾回收机制原理是啥?

    不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。

    踩0 评论0
  • 04.13 13:51:28
    回答了问题 2020-04-13 13:51:28

    Java线程会以什么样的方式结束,然后处于死亡状态?

    "线程会以如下3种方式结束,结束后就处于死亡状态。 run()或call()方法执行完成,线程正常结束。 线程抛出一个未捕获的 Exception或Error。 直接调用该线程的stop()方法来结束该线程——该方法容易导致死锁,通常不推荐使用。"

    踩0 评论0
  • 04.13 11:46:39
    回答了问题 2020-04-13 11:46:39

    【Java问答月】4月Java提问、答题有奖;24小时优先回答,不回答有礼物!

    参加活动2, 4月13号回答Java问题400道

    踩0 评论0
  • 04.12 22:51:19
    回答了问题 2020-04-12 22:51:19

    Java8流式操作中中间操作有哪些?

    "该操作会保持 stream 处于中间状态,允许做进一步的操作。它返回的还是的 Stream,允许更多的链式操作。常见的中间操作有: filter():对元素进行过滤; sorted():对元素排序; map():元素的映射; distinct():去除重复元素; subStream():获取子 Stream 等。"

    踩0 评论0
  • 04.12 22:50:44
    回答了问题 2020-04-12 22:50:44

    Java8流式操作中串行和并行的流有啥区别?

    流有串行和并行两种,串行流上的操作是在一个线程中依次完成,而并行流则是在多个线程上同时执行。并行与串行的流可以相互切换:通过 stream.sequential() 返回串行的流,通过 stream.parallel() 返回并行的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率。

    踩0 评论0
  • 04.12 22:50:20
    回答了问题 2020-04-12 22:50:20

    Java8集合之流式操作是啥?

    "Java 8 引入了流式操作(Stream),通过该操作可以实现对集合(Collection)的并行处理和函数式操作。根据操作返回的结果不同,流式操作分为中间操作和最终操作两种。最终操作返回一特定类型的结果,而中间操作返回流本身,这样就可以将多个操作依次串联起来。根据流的并发性,流又可以分为串行和并行两种。流式操作实现了集合的过滤、排序、映射等功能。 Stream 和 Collection 集合的区别:Collection 是一种静态的内存数据结构,而 Stream 是有关计算的。前者是主要面向内存,存储在内存中,后者主要是面向 CPU,通过 CPU 实现计算。"

    踩0 评论0
  • 04.12 22:49:57
    回答了问题 2020-04-12 22:49:57

    Java8接口中允许定义静态方法吗?

    "在接口中,还允许定义静态的方法。接口中的静态方法可以直接用接口来调用。 例如,下面接口中定义了一个静态方法 find,该方法可以直接用 StaticFunInterface .find() 来调用。 public interface StaticFunInterface { public static int find(){ return 1; } } public class TestStaticFun { public static void main(String[] args){ //接口中定义了静态方法 find 直接被调用 StaticFunInterface.fine(); } }"

    踩0 评论0
  • 04.12 22:49:23
    回答了问题 2020-04-12 22:49:23

    Java8接口中默认方法是啥?

    "Java 8 还允许我们给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做扩展方法。在实现该接口时,该默认扩展方法在子类上可以直接使用,它的使用方式类似于抽象类中非抽象成员方法。但扩展方法不能够重载 Object 中的方法。例如:toString、equals、 hashCode 不能在接口中被重载。 例如,下面接口中定义了一个默认方法 count(),该方法可以在子类中直接使用。 public interface DefaultFunInterface { //定义默认方法 count default int count(){ return 1; } } public class SubDefaultFunClass implements DefaultFunInterface { public static void main(String[] args){ //实例化一个子类对象,改子类对象可以直接调用父接口中的默认方法 count SubDefaultFunClass sub = new SubDefaultFunClass(); sub.count(); } }"

    踩0 评论0
  • 04.12 22:49:00
    回答了问题 2020-04-12 22:49:00

    Java如何检查是否是函数式接口?

    Lambda 表达式需要“函数式接口”的支持 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰 可以检查是否是函数式接口

    踩0 评论0
  • 04.12 22:48:28
    回答了问题 2020-04-12 22:48:28

    Java8 Lambda表达式语法有哪些?

    "语法格式一:无参数,无返回值 () -> System.out.println(“Hello Lambda!”); 语法格式二:有一个参数,并且无返回值 (x) -> System.out.println(x) 语法格式三:若只有一个参数,小括号可以省略不写 x -> System.out.println(x) 语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句 Comparator com - (x, y) -> { System.out.println(“函数式接口”); return Integer.compare(x, y); }; 语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写 - omparator com = (x, y) -> Integer.compare(x, y); 语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下- 文推断出,数据类型,即“类型推断” (Integer x, Integer y) -> Integer.compare(x, y);"

    踩0 评论0
  • 04.12 22:47:43
    回答了问题 2020-04-12 22:47:43

    Java8 Lambda表达式是什么?

    "Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 将 Lambda 表达式拆分成两部分: 左侧:Lambda 表达式的参数列表 右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体"

    踩0 评论0
  • 04.12 22:47:19
    回答了问题 2020-04-12 22:47:19

    Java中如何进行正则表达式替换?

    "查找到子字符串后,一个常见的后续操作是替换。String有多个替换方法: public String replace(char oldChar, char newChar) public String replace(CharSequence target, CharSequence replacement) public String replaceAll(String regex, String replacement) public String replaceFirst(String regex, String replacement) 第一个replace方法操作的是单个字符,第二个是CharSequence,它们都是将参数看作普通字符。而replaceAll和replaceFirst则将参数regex看作正则表达式,它们的区别是, replaceAll替换所有找到的子字符串,而replaceFirst则只替换第一个找到的。"

    踩0 评论0
  • 04.12 22:46:45
    回答了问题 2020-04-12 22:46:45

    Java中如何进行正则表达式查找?

    "查找就是在文本中寻找匹配正则表达式的子字符串,,看个例子: public static void main(String[] args) { String regex = ""\d{4}-\d{2}-\d{2}""; Pattern pattern = Pattern.compile(regex); String str = ""today is 2017-06-02, yesterday is 2017-06-01""; Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(""find "" + matcher.group() + "" position:"" + matcher.start()+""-""+matcher.end()); } } 代码寻找所有类似""2017-06-02""这种格式的日期,输出为: find 2017-06-02 position:9-19 find 2017-06-01 position:34-44 Matcher的内部记录有一个位置,起始为0, find方法从这个位置查找匹配正则表达式的子字符串,找到后,返回true,并更新这个内部位置,匹配到的子字符串信息可以通过如下方法获取: public String group():匹配到的完整子字符串 public int start():子字符串的起始位置 public int end():子字符串的结束位置"

    踩0 评论0
  • 04.12 22:45:36
    回答了问题 2020-04-12 22:45:36

    Java中如何进行正则表达式验证?

    "验证就是检验输入文本是否完整匹配预定义的正则表达式,经常用于检验用户的输入是否合法。String有如下方法:matches() String的matches实际调用的是Pattern的如下方法: public static boolean matches(String regex, CharSequence input) 这是一个静态方法,它的代码为: public static boolean matches(String regex, CharSequence input) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(input); return m.matches(); } 就是先调用compile编译regex为Pattern对象,再调用Pattern的matcher方法生成一个匹配对象Matcher, Matcher的matches方法返回是否完整匹配。"

    踩0 评论0
  • 04.12 22:45:07
    回答了问题 2020-04-12 22:45:07

    Java中如何进行正则表达式切分?

    "文本处理的一个常见需求是根据分隔符切分字符串,比如在处理CSV文件时,按逗号分隔每个字段,这个需求听上去很容易满足,因为String类有如下方法:sprint()。 不过,有一些重要的细节,我们需要注意。split将参数regex看作正则表达式,而不是普通的字符,如果分隔符是元字符,比如. $ | ( ) [ {^ ? * + \,就需要转义。比如按点号'.'分隔,需要写为: str.split(""\.""); Pattern也有split方法,与String方法的定义类似: 与String方法的区别如下。 1)Pattern接受的参数是CharSequence,更为通用,我们知道String、StringBuilder、StringBuffer、CharBuffer等都实现了该接口。 2)如果regex长度大于1或包含元字符,String的split方法必须先将regex编译为Pattern对象,再调用Pattern的split方法,这时,为避免重复编译,应该优先采用Pattern的方法。 3)如果regex就是一个字符且不是元字符,String的split方法会采用更为简单高效的实现,所以,这时应该优先采用String的split方法。"

    踩0 评论0
  • 04.12 22:44:28
    回答了问题 2020-04-12 22:44:28

    Java中如何表示正则表达式?

    正则表达式由元字符和普通字符组成,字符''是一个元字符,要在正则表达式中表示''本身,需要使用它转义,即'\'。在Java中,没有什么特殊的语法能直接表示正则表达式,需要用字符串表示,而在字符串中,''也是一个元字符,为了在字符串中表示正则表达式的'',就需要使用两个'',即'\',而要匹配''本身,就需要4个'',即'\\'。

    踩0 评论0
  • 04.12 22:44:06
    回答了问题 2020-04-12 22:44:06

    Java正则表达式环视边界匹配如何使用?

    "对于边界匹配,除了使用上面介绍的边界元字符,还有一种更为通用的方式,那就是环视。环视的字面意思就是左右看看,需要左右符合一些条件,本质上,它也是匹配边界,对边界有一些要求,这个要求是针对左边或右边的字符串的。根据要求不同,分为4种环视: 1)肯定顺序环视,语法是(? =...),要求右边的字符串匹配指定的表达式。比如表达式abc(?=def), (? =def)在字符c右面,即匹配c右面的边界。对这个边界的要求是:它的右边有def,比如abcdef,如果没有,比如abcd,则不匹配。 2)否定顺序环视,语法是(? ! ...),要求右边的字符串不能匹配指定的表达式。比如表达式s(? !ing),匹配一般的s,但不匹配后面有ing的s。注意:避免与排除型字符组混淆,比如s[^ing],s[^ing]匹配的是两个字符,第一个是s,第二个是i、n、g以外的任意一个字符。 3)肯定逆序环视,语法是(? <=...),要求左边的字符串匹配指定的表达式。比如表达式(?<=\s)abc, (? <=\s)在字符a左边,即匹配a左边的边界。对这个边界的要求是:它的左边必须是空白字符。 4)否定逆序环视,语法是(? <! ...),要求左边的字符串不能匹配指定的表达式。比如表达式(?<! \w)cat, (? <! \w)在字符c左边,即匹配c左边的边界。对这个边界的要求是:它的左边不能是单词字符。"

    踩0 评论0
  • 04.12 22:43:42
    回答了问题 2020-04-12 22:43:42

    Java正则表达式特殊边界匹配如何使用?

    在正则表达式中,除了可以指定字符需满足什么条件,还可以指定字符的边界需满足什么条件,或者说匹配特定的边界,常用的表示特殊边界的元字符有^、$、\A、\Z、\z和\b。默认情况下,^匹配整个字符串的开始,^abc表示整个字符串必须以abc开始。需要注意的是^的含义,在字符组中它表示排除,但在字符组外,它匹配开始,比如表达式^[^abc],表示以一个不是a、b、c的字符开始。默认情况下,$匹配整个字符串的结束,不过,如果整个字符串以换行符结束,$匹配的是换行符之前的边界,比如表达式abc$,表示整个表达式以abc结束,或者以abc\r\n或abc\n结束。以上^和$的含义是默认模式下的,可以指定另外一种匹配模式:多行匹配模式,在此模式下,会以行为单位进行匹配,^匹配的是行开始,$匹配的是行结束,比如表达式是^abc$,字符串是"abc\nabc\r\n",就会有两个匹配。

    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2020-04-13

    Java为何要使用线程池?

    "系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。 与数据库连接池类似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或Callable对象传给线程池,线程池就会启动一个线程来执行它们的run()或call()方法,当run()或call()方法执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个Runnable对象的run()或call()方法。 除此之外,使用线程池可以有效地控制系统中并发线程的数量,当系统中包含大量并发线程时,会导致系统性能剧烈下降,甚至导致JVM崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过此数。"

    踩0 评论0
  • 回答了问题 2020-04-13

    Java JVM垃圾回收机制策略有哪些?

    Java JVM垃圾回收机制策略有四种:标记清除算法、复制算法、标记压缩算法和分代算法。

    踩0 评论0
  • 回答了问题 2020-04-13

    Java JVM中垃圾回收机制原理是啥?

    不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。

    踩0 评论0
  • 回答了问题 2020-04-13

    Java线程会以什么样的方式结束,然后处于死亡状态?

    "线程会以如下3种方式结束,结束后就处于死亡状态。 run()或call()方法执行完成,线程正常结束。 线程抛出一个未捕获的 Exception或Error。 直接调用该线程的stop()方法来结束该线程——该方法容易导致死锁,通常不推荐使用。"

    踩0 评论0
  • 回答了问题 2020-04-13

    【Java问答月】4月Java提问、答题有奖;24小时优先回答,不回答有礼物!

    参加活动2, 4月13号回答Java问题400道

    踩0 评论0
  • 回答了问题 2020-04-12

    Java8流式操作中中间操作有哪些?

    "该操作会保持 stream 处于中间状态,允许做进一步的操作。它返回的还是的 Stream,允许更多的链式操作。常见的中间操作有: filter():对元素进行过滤; sorted():对元素排序; map():元素的映射; distinct():去除重复元素; subStream():获取子 Stream 等。"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java8流式操作中串行和并行的流有啥区别?

    流有串行和并行两种,串行流上的操作是在一个线程中依次完成,而并行流则是在多个线程上同时执行。并行与串行的流可以相互切换:通过 stream.sequential() 返回串行的流,通过 stream.parallel() 返回并行的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率。

    踩0 评论0
  • 回答了问题 2020-04-12

    Java8集合之流式操作是啥?

    "Java 8 引入了流式操作(Stream),通过该操作可以实现对集合(Collection)的并行处理和函数式操作。根据操作返回的结果不同,流式操作分为中间操作和最终操作两种。最终操作返回一特定类型的结果,而中间操作返回流本身,这样就可以将多个操作依次串联起来。根据流的并发性,流又可以分为串行和并行两种。流式操作实现了集合的过滤、排序、映射等功能。 Stream 和 Collection 集合的区别:Collection 是一种静态的内存数据结构,而 Stream 是有关计算的。前者是主要面向内存,存储在内存中,后者主要是面向 CPU,通过 CPU 实现计算。"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java8接口中允许定义静态方法吗?

    "在接口中,还允许定义静态的方法。接口中的静态方法可以直接用接口来调用。 例如,下面接口中定义了一个静态方法 find,该方法可以直接用 StaticFunInterface .find() 来调用。 public interface StaticFunInterface { public static int find(){ return 1; } } public class TestStaticFun { public static void main(String[] args){ //接口中定义了静态方法 find 直接被调用 StaticFunInterface.fine(); } }"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java8接口中默认方法是啥?

    "Java 8 还允许我们给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做扩展方法。在实现该接口时,该默认扩展方法在子类上可以直接使用,它的使用方式类似于抽象类中非抽象成员方法。但扩展方法不能够重载 Object 中的方法。例如:toString、equals、 hashCode 不能在接口中被重载。 例如,下面接口中定义了一个默认方法 count(),该方法可以在子类中直接使用。 public interface DefaultFunInterface { //定义默认方法 count default int count(){ return 1; } } public class SubDefaultFunClass implements DefaultFunInterface { public static void main(String[] args){ //实例化一个子类对象,改子类对象可以直接调用父接口中的默认方法 count SubDefaultFunClass sub = new SubDefaultFunClass(); sub.count(); } }"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java如何检查是否是函数式接口?

    Lambda 表达式需要“函数式接口”的支持 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰 可以检查是否是函数式接口

    踩0 评论0
  • 回答了问题 2020-04-12

    Java8 Lambda表达式语法有哪些?

    "语法格式一:无参数,无返回值 () -> System.out.println(“Hello Lambda!”); 语法格式二:有一个参数,并且无返回值 (x) -> System.out.println(x) 语法格式三:若只有一个参数,小括号可以省略不写 x -> System.out.println(x) 语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句 Comparator com - (x, y) -> { System.out.println(“函数式接口”); return Integer.compare(x, y); }; 语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写 - omparator com = (x, y) -> Integer.compare(x, y); 语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下- 文推断出,数据类型,即“类型推断” (Integer x, Integer y) -> Integer.compare(x, y);"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java8 Lambda表达式是什么?

    "Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 将 Lambda 表达式拆分成两部分: 左侧:Lambda 表达式的参数列表 右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java中如何进行正则表达式替换?

    "查找到子字符串后,一个常见的后续操作是替换。String有多个替换方法: public String replace(char oldChar, char newChar) public String replace(CharSequence target, CharSequence replacement) public String replaceAll(String regex, String replacement) public String replaceFirst(String regex, String replacement) 第一个replace方法操作的是单个字符,第二个是CharSequence,它们都是将参数看作普通字符。而replaceAll和replaceFirst则将参数regex看作正则表达式,它们的区别是, replaceAll替换所有找到的子字符串,而replaceFirst则只替换第一个找到的。"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java中如何进行正则表达式查找?

    "查找就是在文本中寻找匹配正则表达式的子字符串,,看个例子: public static void main(String[] args) { String regex = ""\d{4}-\d{2}-\d{2}""; Pattern pattern = Pattern.compile(regex); String str = ""today is 2017-06-02, yesterday is 2017-06-01""; Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(""find "" + matcher.group() + "" position:"" + matcher.start()+""-""+matcher.end()); } } 代码寻找所有类似""2017-06-02""这种格式的日期,输出为: find 2017-06-02 position:9-19 find 2017-06-01 position:34-44 Matcher的内部记录有一个位置,起始为0, find方法从这个位置查找匹配正则表达式的子字符串,找到后,返回true,并更新这个内部位置,匹配到的子字符串信息可以通过如下方法获取: public String group():匹配到的完整子字符串 public int start():子字符串的起始位置 public int end():子字符串的结束位置"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java中如何进行正则表达式验证?

    "验证就是检验输入文本是否完整匹配预定义的正则表达式,经常用于检验用户的输入是否合法。String有如下方法:matches() String的matches实际调用的是Pattern的如下方法: public static boolean matches(String regex, CharSequence input) 这是一个静态方法,它的代码为: public static boolean matches(String regex, CharSequence input) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(input); return m.matches(); } 就是先调用compile编译regex为Pattern对象,再调用Pattern的matcher方法生成一个匹配对象Matcher, Matcher的matches方法返回是否完整匹配。"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java中如何进行正则表达式切分?

    "文本处理的一个常见需求是根据分隔符切分字符串,比如在处理CSV文件时,按逗号分隔每个字段,这个需求听上去很容易满足,因为String类有如下方法:sprint()。 不过,有一些重要的细节,我们需要注意。split将参数regex看作正则表达式,而不是普通的字符,如果分隔符是元字符,比如. $ | ( ) [ {^ ? * + \,就需要转义。比如按点号'.'分隔,需要写为: str.split(""\.""); Pattern也有split方法,与String方法的定义类似: 与String方法的区别如下。 1)Pattern接受的参数是CharSequence,更为通用,我们知道String、StringBuilder、StringBuffer、CharBuffer等都实现了该接口。 2)如果regex长度大于1或包含元字符,String的split方法必须先将regex编译为Pattern对象,再调用Pattern的split方法,这时,为避免重复编译,应该优先采用Pattern的方法。 3)如果regex就是一个字符且不是元字符,String的split方法会采用更为简单高效的实现,所以,这时应该优先采用String的split方法。"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java中如何表示正则表达式?

    正则表达式由元字符和普通字符组成,字符''是一个元字符,要在正则表达式中表示''本身,需要使用它转义,即'\'。在Java中,没有什么特殊的语法能直接表示正则表达式,需要用字符串表示,而在字符串中,''也是一个元字符,为了在字符串中表示正则表达式的'',就需要使用两个'',即'\',而要匹配''本身,就需要4个'',即'\\'。

    踩0 评论0
  • 回答了问题 2020-04-12

    Java正则表达式环视边界匹配如何使用?

    "对于边界匹配,除了使用上面介绍的边界元字符,还有一种更为通用的方式,那就是环视。环视的字面意思就是左右看看,需要左右符合一些条件,本质上,它也是匹配边界,对边界有一些要求,这个要求是针对左边或右边的字符串的。根据要求不同,分为4种环视: 1)肯定顺序环视,语法是(? =...),要求右边的字符串匹配指定的表达式。比如表达式abc(?=def), (? =def)在字符c右面,即匹配c右面的边界。对这个边界的要求是:它的右边有def,比如abcdef,如果没有,比如abcd,则不匹配。 2)否定顺序环视,语法是(? ! ...),要求右边的字符串不能匹配指定的表达式。比如表达式s(? !ing),匹配一般的s,但不匹配后面有ing的s。注意:避免与排除型字符组混淆,比如s[^ing],s[^ing]匹配的是两个字符,第一个是s,第二个是i、n、g以外的任意一个字符。 3)肯定逆序环视,语法是(? <=...),要求左边的字符串匹配指定的表达式。比如表达式(?<=\s)abc, (? <=\s)在字符a左边,即匹配a左边的边界。对这个边界的要求是:它的左边必须是空白字符。 4)否定逆序环视,语法是(? <! ...),要求左边的字符串不能匹配指定的表达式。比如表达式(?<! \w)cat, (? <! \w)在字符c左边,即匹配c左边的边界。对这个边界的要求是:它的左边不能是单词字符。"

    踩0 评论0
  • 回答了问题 2020-04-12

    Java正则表达式特殊边界匹配如何使用?

    在正则表达式中,除了可以指定字符需满足什么条件,还可以指定字符的边界需满足什么条件,或者说匹配特定的边界,常用的表示特殊边界的元字符有^、$、\A、\Z、\z和\b。默认情况下,^匹配整个字符串的开始,^abc表示整个字符串必须以abc开始。需要注意的是^的含义,在字符组中它表示排除,但在字符组外,它匹配开始,比如表达式^[^abc],表示以一个不是a、b、c的字符开始。默认情况下,$匹配整个字符串的结束,不过,如果整个字符串以换行符结束,$匹配的是换行符之前的边界,比如表达式abc$,表示整个表达式以abc结束,或者以abc\r\n或abc\n结束。以上^和$的含义是默认模式下的,可以指定另外一种匹配模式:多行匹配模式,在此模式下,会以行为单位进行匹配,^匹配的是行开始,$匹配的是行结束,比如表达式是^abc$,字符串是"abc\nabc\r\n",就会有两个匹配。

    踩0 评论0
正在加载, 请稍后...
滑动查看更多