基础语法探究

测试代码

foreach

  • Only access

    当使用foreach循环基本类型时变量时不能修改集合中的元素的值,遍历对象时可以修改对象的属性的值,但是不能修改对象的引用

  • Only single structure

    同时只能遍历一个collection或数组,不能同时遍历多余一个collection或数组

  • Only single element

    遍历过程中,collection或数组中同时只有一个元素可见,即只有“当前遍历到的元素”可见,而前一个或后一个元素是不可见的。

  • Only forward

    只能正向遍历,不能反向遍历

  • At least Java 5

    如果要兼容Java 5之前的Java版本,就不能使用For-each

  • Iterable

    任何一个集合,无论是JDK提供的还是自己写的,只要想使用foreach循环遍历,就必须正确地实现Iterable接口

  • Array

    Java将对于数组的foreach循环转换为对于这个数组每一个的循环引用。

正则

  • 匹配的模式(Pattern flags)
    Pattern Pattern.compile(String regex, int flag)
编译标志 效果
Pattern.UNIX_LINES 启用 Unix 行模式。在此模式中,.、^ 和 $ 的行为中仅识别 ‘/n’行结束符。通过嵌入式标志表达式 (?d) 也可以启用 Unix 行模式。
CASE_INSENSITIVE 启用不区分大小写的匹配。默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。可以通过指定#UNICODE_CASE标志连同此标志来启用 Unicode 感知的、不区分大小写的匹配。通过嵌入式标志表达式 (?i)也可以启用不区分大小写的匹配。指定此标志可能对性能产生一些影响。
COMMENTS 模式中允许空白和注释。此模式将忽略空白和在结束行之前以 #开头的嵌入式注释。通过嵌入式标志表达式 (?x) 也可以启用注释模式。
MULTILINE 启用多行模式。在多行模式中,表达式 ^ 和 $仅分别在行结束符前后匹配,或者在输入序列的结尾处匹配。默认情况下,这些表达式仅在整个输入序列的开头和结尾处匹配。通过嵌入式标志表达式 (?m) 也可以启用多行模式。
LITERAL 启用模式的字面值解析。指定此标志后,指定模式的输入字符串就会作为字面值字符序列来对待。输入序列中的元字符或转义序列不具有任何特殊意义。标志 CASE_INSENSITIVE 和 UNICODE_CASE 在与此标志一起使用时将对匹配产生影响。其他标志都变得多余了。不存在可以启用字面值解析的嵌入式标志字符。
DOTALL 启用 dotall 模式。在 dotall 模式中,表达式 .可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符。通过嵌入式标志表达式 (?s) 也可以启用 dotall 模式(s 是 “single-line” 模式的助记符,在 Perl 中也使用它)。
UNICODE_CASE 启用 Unicode 感知的大小写折叠。指定此标志后,由 #CASE_INSENSITIVE标志启用时,不区分大小写的匹配将以符合 Unicode Standard的方式完成。默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。通过嵌入式标志表达式 (?u)也可以启用 Unicode 感知的大小写折叠。指定此标志可能对性能产生影响。
CANON_EQ 启用规范等价。指定此标志后,当且仅当其完整规范分解匹配时,两个字符才可视为匹配。例如,当指定此标志时,表达式 “a/u030A” 将与字符串 “/u00E5”匹配。默认情况下,匹配不考虑采用规范等价。不存在可以启用规范等价的嵌入式标志字符。指定此标志可能对性能产生影响。
UNICODE_CHARACTER_CLASS 启用Unicode版本的预定义字符类和POSIX字符类。当这个标志被指定时,那么(仅US-ASCII)预定义的字符类和POSIX字符类符合Unicode技术标准#18:Unicode正则表达式;附录C:兼容性属性; UNICODE_CHARACTER_CLASS模式也可以通过嵌入标志表达式(?U)。该标志暗示着UNICODE_CASE,也就是说,它启用Unicode感知的案例折叠,指定此标志可能会导致性能损失。