将⼀些转义字符替换为指定标准的字符
需求:
各字段中的 回车符、换⾏符 使⽤空格符(“ ”,⼗六进制0x20)进⾏转义。 英⽂逗号“,” 双引号“"” 单引号“’”以及竖线分隔符“|”按照RFC1738标准分别使⽤ %2C、%22、%27、%7C进⾏转义。
package com.rk.spark
import org.apachemons.lang.StringEscapeUtils
/**
* @program: bd1809
* @class_name StringTest
* @author: rk
* @create: 2019-03-15 12:06
* @Description:
* 各字段中的回车符、换⾏符使⽤空格符(“ ”,⼗六进制0x20)进⾏转义。英⽂逗号“,” 双引号“"”
* 单引号“’”以及竖线分隔符“|” 按照RFC1738标准分别使⽤ %2C、%22、%27、%7C进⾏转义。
*
*
* replace的参数是char和CharSequence,即可以⽀持字符的替换,也⽀持字符串的替换
* (CharSequence即字符串序列的意思,说⽩了也就是字符串);
*
* replaceAll的参数是regex,即基于规则表达式的替换,⽐如:可以通过replaceAll("\\d", "*")
* 把⼀个字符串所有的数字字符都换成星号;
*
* 相同点:都是全部替换,即把源字符串中的某⼀字符或字符串全部换成指定的字符或字符串;
*
* 不同点:replaceAll⽀持正则表达式,因此会对参数进⾏解析(两个参数均是),如replaceAll("\\d", "*"),
* ⽽replace则不会,replace("\\d","*")就是替换"\\d"的字符串,⽽不会解析为正则。
*
* 另外还有⼀个不同点:“\”在java中是⼀个转义字符,所以需要⽤两个代表⼀个。
* 例如System.out.println( "\\" ) ;只打印出⼀个"\"。但是“\”也是正则表达式中的转义字符,需要⽤两个代表⼀个。
* 所以:\\\\被java转换成\\,\\⼜被正则表达式转换成\,因此⽤replaceAll替换“\”为"\\",
* 就要⽤replaceAll("\\\\","\\\\\\\\"),⽽replace则replace("\\","\\\\")。
*
**/
object StringTest {
def main(args: Array[String]): Unit = {
val str = "aa\raabbb\rccc\nsc"
println(str)
//使⽤StringEscapeUtils.escapeJava()可以显⽰不转义的字符串
val out: String = StringEscapeUtils.escapeJava(str)
println(out)
place("\\r", " "))
//replaceAll底层是使⽤的正则表达式
placeAll("\\\\r"," "))
println(getSpecialCharTransferField(str))
}
def getSpecialCharTransferField(field:String):String= {
var aa = field
var lastStr = ""
var lastStr01 = ""
var lastStr02 = ""
var lastStr03 = ""
var lastStr04 = ""
var lastStr04 = ""
ains("\r")||ains("\n")){
val reg = "\r|\n".r
lastStr = String()," ")
aa = lastStr
}
ains(",")||aa.contains("\"")||aa.contains("'")||aa.contains("|")){
lastStr01 = aa.replace(",","%2C")
lastStr02 = place("\"","%22")
lastStr03 = place("'","%27")
lastStr04 = place("|","%7C")
aa = lastStr04
}
aa
}
}
replaceall()public String replaceAll(String regex, String replacement) {
return Patternpile(regex).matcher(this).replaceAll(replacement);
上⾯为String类中replaceAll的源码,可以看出底层是采⽤的正则表达式的⽅式。
顺便整理⼀下replace和replaceAll的区别:
replace的参数是char和CharSequence,即可以⽀持字符的替换,也⽀持字符串的替换(CharSequence即字符串序列的意思,说⽩了也就是字符串);
replaceAll的参数是regex,即基于规则表达式的替换,⽐如:可以通过replaceAll("\\d", "*")把⼀个字符串所有的数字字符都换成星号;
相同点:都是全部替换,即把源字符串中的某⼀字符或字符串全部换成指定的字符或字符串;
不同点:replaceAll⽀持正则表达式,因此会对参数进⾏解析(两个参数均是),如replaceAll("\\d", "*")
,⽽replace则不
会,replace("\\d","*")就是替换"\\d"的字符串,⽽不会解析为正则。
另外还有⼀个不同点:“\”在java中是⼀个转义字符,所以需要⽤两个代表⼀个。例如System.out.println( "\\" ) ;只打印出⼀个"\"。但是“\”也是正则表达式中的转义字符,需要⽤两个代表⼀个。所以:\\\\被java转换成\\,\\⼜被正则表达式转换成\,因此⽤replaceAll替换“\”为"\\",就要⽤replaceAll("\\\\","\\\\\\\\"),⽽replace则replace("\\","\\\\")。
如果只想替换第⼀次出现的,可以使⽤replaceFirst(),这个⽅法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第⼀次出现的字符串。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。