java 特殊符号输出绝对基础?

Python019

java 特殊符号输出绝对基础?,第1张

稍微深入一点的分析会认为该程序应该打印16,因为两个Unicode转义字符每一个在源文件中都需要用6个字符来表示,但是它们只表示字符串中的一个字符。因此这个字符串应该比它的外表看其来要短10个字符。 如果你运行这个程序,就会发现事情远不是这么回事。它打印的既不是26也不是16,而是2。 理解这个谜题的关键是要知道:Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前,先将Unicode转义字符转换成为它们所表示的字符[JLS 3.2]。因此,程序中的第一个Unicode转义字符将作为一个单字符字符串字面常量("a")的结束引号,而第二个Unicode转义字符将作为另一个单字符字符串字面常量("b")的开始引号。程序打印的是表达式"a".length()+"b".length(),即2。

JAVA中转义字符:

1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'

\0:空字符

2.Unicode转义字符:\u + 四个十六进制数字;0~65535

\u0000:空字符

3.特殊字符:就3个

\":双引号

\':单引号

\\:反斜线

4.控制字符:5个

\' 单引号字符

\\ 反斜杠字符

\r 回车

\n 换行

\f 走纸换页

\t 横向跳格

\b 退格

点的转义:. ==>u002E

美元符号的转义:$ ==>u0024

乘方符号的转义:^ ==>u005E

左大括号的转义:{ ==>u007B

左方括号的转义:[ ==>u005B

左圆括号的转义:( ==>u0028

竖线的转义:| ==>u007C

右圆括号的转义:) ==>u0029

星号的转义:* ==>u002A

加号的转义:+ ==>u002B

问号的转义:? ==>u003F

反斜杠的转义: ==>u005C

一般都是使用正则表达式,如下代码:\x0d\x0apublic static final String DEFAULT_QUERY_REGEX = "[!$^&*+=|{}''\",/?~!#¥%??&*——|{}【】‘;:”“'。,、?]" \x0d\x0a \x0d\x0a/** \x0d\x0a * 判断查询参数中是否以特殊字符开头,如果以特殊字符开头则返回true,否则返回false \x0d\x0a * \x0d\x0a * @param value \x0d\x0a * @return \x0d\x0a * @see {@link #getQueryRegex()} \x0d\x0a * @see {@link #DEFAULT_QUERY_REGEX} \x0d\x0a */ \x0d\x0apublic boolean specialSymbols(String value) { \x0d\x0aif (StringUtil.isBlank(value)) { \x0d\x0areturn false \x0d\x0a} \x0d\x0aPattern pattern = Pattern.compile(getQueryRegex()) \x0d\x0aMatcher matcher = pattern.matcher(value) \x0d\x0a \x0d\x0achar[] specialSymbols = getQueryRegex().toCharArray() \x0d\x0a \x0d\x0aboolean isStartWithSpecialSymbol = false// 是否以特殊字符开头 \x0d\x0afor (int i = 0i 回答于 2022-12-11