本文转载自微信公众号《潜行》,作者cscw。转载本文请联系SneakUp公众号。前言对字符串的常见操作,记住。如果您有字符串操作技巧和有用的工具,请完成它们。随便点个赞,随便看看String的实现原理。String常用方法字符串缓存池和String.intern正则匹配及字符串StringBuffer和StringBuilderspring工具类StringUtilsString实现原理publicfinalclassStringimplementsSerializable,Comparable,CharSequence{privatefinalcharvalue[];privateinthash;//Defaultto0String有一个value的字符数组,用来保存字符串。默认编码为utf-8String常用方法//从toffset开始,是否以前缀开头publicbooleanstartsWith(Stringprefix,inttoffset)//str出现的最后一个下标publicintlastIndexOf(Stringstr)//返回beginIndex和endIndex之间的下标StringpublicStringsubstring(intbeginIndex,intendIndex)//连接str并返回一个新字符串publicStringconcat(Stringstr)//匹配regex正则表达式publicbooleanmatches(Stringregex)//替换字符publicStringreplace(charoldChar,charnewChar)//替换字符串publicStringreplace(CharSequencetarget,CharSequencereplacement)//获取charsetName编码的字节数组publicbyte[]getBytes(StringcharsetName)//获取publicintcodePointAt(intindex)//拆分publicString[]split(Stringregex,intlimit)//转为小写publicStringtoLowerCase()//转为大写publicStringtoUpperCase()//拦截publicStringtrim()//元素前后的空格使用分隔符作为连接符合并成新的字符串publicstaticStringjoin(CharSequencedelimiter,CharSequence...elements)publicstaticStringjoin(CharSequencedelimiter,Iterableelements)//args参数填入format的占位符,返回一个新的字符串publicstaticStringformat(Stringformat,Object...args)//将字符串publicnativeS转换为缓存池tringtern()用法示例Stringdata="String字符串操作-必知必知";System.out.println(data.startsWith("St",0));System.out.println(data.startsWith("St",5));------------truefalse字符串格式输出publicstaticStringformat(Stringformat,Object...args)System.out.println(String.format("%s-%s","wst","csc"));--------wst-csc字符串缓冲池和String.internstring.intern();intern首先判断常量池中是否存有相同的字符串,存在则返回引用;否则,在常量池中记录堆中最先出现的字符串的引用,如果先执行Strings="st",则返回该引用;相当于执行intern();先在常量池“st”中创建,并将引用A存放在常量池中,返回给s。这时候String("hello").intern()就会返回常量池的引用。A返回用法示例publicstaticvoidmain(String[]args)throwsException{Stringone="st";Stringtwo=newString("st");Stringthree=two。intern();System.out.println(two==one);System.out.println(three==one);}----------------falsetrue字符串和正则匹配,MatcherCharacterDescription\将下一个字符标记为特殊字符、文字、反向引用或八进制转义符。例如,“n”匹配字符“n”。"\n"匹配一个换行符,"\("匹配"("^匹配输入字符串的开头。如果设置了RegExp对象的Multiline属性,^也会匹配"\n"或"之后的位置\r"匹配$匹配输入字符串末尾的位置。如果设置了RegExp对象的Multiline属性,$也匹配"\n"或"\r"之前的位置*前面的零个或多个匹配字符或子表达式。例如,zo*匹配“z”和“zoo”。*相当于{0,}+匹配前面的字符或子表达式一次或多次。例如,“zo+”匹配“zo”和“zoo”",但不匹配"z"。+等价于{1,}?匹配前面的字符或子表达式零次或一次。例如,"do(es)?"匹配"do"或"does""do".?等价于{0,1}{n}n是一个非负整数。正好匹配n次。比如"o{2}"不匹配"Bob"中的"o",而是匹配"food"中的两个"o"匹配{n,}n是一个非负整数。至少匹配nti梅斯。例如,“o{2,}”不匹配“Bob”中的“o”,而是匹配“fooooood”中的所有o。“o{1,}”等同于“o+”。"o{0,}"等同于"o*"{n,m}m和n是非负整数,其中n<=m。至少匹配n次,最多匹配m次。例如,“o{1,3}”匹配“fooooood”中的前三个o。“o{0,1}”等同于“o?”。注意:您不能在逗号和数字之间插入空格。?当此字符紧跟任何其他限定符(*、+、?、{n}、{n,}、{n,m})时,匹配模式为“非贪婪”。“非贪婪”模式匹配找到的可能最短的字符串,而默认的“贪婪”模式匹配找到的可能最长的字符串。例如,在字符串“oooo”中,“o+?”仅匹配单个“o”,而“o+”匹配所有“o”。.匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用“[\s\S]”等模式。\n换行匹配。相当于\x0a和\cJ\r匹配一个回车。等同于\x0d和\cM\s匹配任何空白字符,包括空格、制表符、换页符等。\d匹配数字字符。相当于[0-9][a-z]字符范围。匹配指定范围内的任意字符。例如,“[a-z]”匹配“a”到“z”范围内的任何小写字母booleanisMatch=Pattern.matches(pattern,content);System.out.println("Doesthestringcontainthe'st'substring?"+isMatch);}-------------是否字符串包含“st”子字符串?trueStringBuffer和StringBuilderStringBuffer、StringBuilder一样,也是用来表示字符串的。String类是不可变类,每次都需要重新申请内存。但是StringBuffer和StringBuilder是提前申请缓存内存的。在拼接越来越长的字符串时,性能优于String。减法运算被锁定;StringBuilder是StringBuffer的无锁版本。如果不了解线程安全,推荐使用StringBuffer。不需要考虑加锁带来的性能损失,因为jvm会根据情况自动优化为无锁操作。)//截取两边的空格publicstaticStringtrimWhitespace(Stringstr)//替换所有的空格publicstaticStringtrimAllWhitespace(Stringstr)//获取文件名publicstaticStringgetFilename(Stringpath)欢迎参考关于String.intern()[1]Intern方法的文章字符串[2]Java正则表达式[3]