JAVA转义字符详解

什么是转义字符?

转义字符一般用于表示不能直接显示的字符,比如后退键、回车键等,或者用来将特殊意义的字符转换回它原来的意义。

转义字符出现原因

其实所有编程语言,拥有转义字符的原因基本上是两点:

1.使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号。所以只能用转义字符来表示 。

2.某一些特定的字符在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义。比如说Html中,<被HTML定义为标签的开始,所以当我们转入<时,HTML就会把它当作为开始,而不是当作一个<来看待。再如PHP 的双引号("),被PHP定义为字符串的外围标签,所以如果你在一对双引号里面,还想要使用双引号,只能使用转义字符了。不然PHP就会报错了。

转义字符的意义

从上面也可以看出转义无非是两种情况:

1.将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键等。

2.用来将特殊意义的字符转换回它原来的意义。一般用在正则表达式中。还有有些脚本语言是弱类型,有些语言比如html 并不是编程语言,而是标记语言,有些语言只有一种类型 比如shell 脚本语言,这些语言中字符串都不加引号” ” ,或者可以不加引号“ ”,所以有时候需要转移字符说明某字符此时的身份是普通字符,而不是有特殊意义的元字符。

另外出于网站的安全。在数据写入数据库前,都会使用转义字符(函数)对一些敏感字符进行转义。这样做可以避免一些别有用心的人利用特殊符号的注入攻击。


JAVA中反斜杠“”的作用

VBS代码中确实不用转义,但是在JAVA或JS中,它采用的是C语言的语法,所以要转义,引号内要双写\表示一个反


split("\.")什么意思

1. 首先要明白split方法的参数含义:
public String[] split(String regex)根据给定的正则表达来式的匹配来拆分此字符串

2. 然后就要明确正则表达式的含义了:

''表示转义字符

\会转义成反斜杠,反斜杠本身就是转义符,所有就成了“.”,在进行转义就是.,所以\.实际上是“.”


正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

许多程序设专计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由属Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。


Java中repalceAll方法解析

现有一个字符串str

String str="{\"name\":\"spy\",\"id\":\"123456\"}";
System.out.println("str = " + str);

在控制台的输出为:

str = {"name":"spy","id":"123456"}

目标str1

str1 = {"name":"spy","id":"123456"}

方法

1. 使用 StringEscapeUtils中的转义与反转义

apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils。利用它可方便地进行html、xml、java等的转义与反转义。

String str="{\"name\":\"spy\",\"id\":\"123456\"}";
System.out.println("str = " + str);
String str1 = StringEscapeUtils.unescapeJava(str);
System.out.println("目标 str1 = " + str1);
//对应方法的StringEscapeUtils.escapeJava(str1);
//可将str1转义回str

控制台输出:

原始 str = {"name":"spy","id":"123456"}
目标 str1 = {"name":"spy","id":"123456"}

2. 使用Java的replaceAll方法

String str1 = str.replaceAll("\\","");
//控制台str1的输出为:{"name":"spy","id":"123456"}

3、Java 的replaceAll 内涵解析

使用Java的replaceAll(String regex, String replacement)函数,即用replacement替换所有的regex匹配项,regex是一个正则表达式,replacement是字符串。

String str="{\"name\":\"spy\",\"id\":\"123456\"}";

(1)对于串str,Java将其进行转义,\ 表示 ,” 表示 ” ,故而在Java内存中即为:
{”name”:”spy”,”id”:”123456”},然而,我们的目标是 {“name”:”spy”,”id”:”123456”},即将转义字符 替换为空。

(2)Java的replaceAll(String regex, String replacement)函数,第一个参数是一个正则表达式。在正则表达式中的“”与后面紧跟的那个字符构成一个转义字符,代表着特殊的意义,比如”n”表示换行符等。所以,如果要在正则表达式中表示一个反斜杠,则应当用\表达 。但参数regex 首先会经过Java的一次转义,若想表达两个反斜杠 \,则需四个反斜杠。

综上所述:replaceAll 的第一个参数是正则表达式,故而要经过两次转义,一次Java、一次正则。因此就需要四个反斜杠才可以匹配一个反斜杠。故而,替换一个反斜杠为空的replaceAll的代码即为:

str1 = str.replaceAll("\\","");

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>