前言

字符串的罕用操作,记一下。如果有字符串的操作小技巧,好用的工具类,欢送补全。大家随便点赞,随便看看

  • String实现原理
  • String罕用办法
  • 字符串的缓存池和String.intern
  • 正则匹配和字符串
  • StringBuffer和StringBuilder
  • spring工具类StringUtils

关注公众号,一起交换,微信搜一搜: 潜行前行

github地址,感激star

String实现原理

public final class String implements Serializable,Comparable<String>, CharSequence {    private final char value[];    private int hash; // Default to 0

String有一个value的字符数组,用来保留字符串的。默认编码是utf-8

String罕用办法

//从toffset开始,是否以prefix结尾public boolean startsWith(String prefix, int toffset)//str呈现的最初一次的下标public int lastIndexOf(String str)//返回下标在beginIndex和endIndex之间的字符串public String substring(int beginIndex, int endIndex)//连贯str,并返回一个新的字符串public String concat(String str)//匹配regex正则表达式public boolean matches(String regex) //替换字符public String replace(char oldChar, char newChar)//替换字符串public String replace(CharSequence target, CharSequence replacement)//获取charsetName编码的字节数组public byte[] getBytes(String charsetName)//获取public int codePointAt(int index)//宰割public String[] split(String regex, int limit)//转成小写public String toLowerCase()//转成大写public String toUpperCase() //截取前后空格public String trim()//elements应用delimiter作为连接符,合并成一个新字符串public static String join(CharSequence delimiter, CharSequence... elements)   public static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)//args参数填充进format的占位符,并返回新字符串public static String format(String format, Object... args)//转为缓存池的字符串public native String intern()

应用示例

String data = "String字符串操作-必知必备";System.out.println(data.startsWith("St",0));System.out.println(data.startsWith("St",5));----------truefalse

字符串的格式化输入

public static String format(String format, Object... args)

System.out.println(String.format("%s-%s","wst","csc"));--------wst-csc

字符串的缓存池和String.intern

string.intern();intern先判断常量池是否存雷同字符串,存在则返回该援用;否则在常量池中记录堆中首次呈现该字符串的援用,并返回该援用。

如果是先执行 String s = "st" ;相当于执行了intern();先在常量池创立"st",并且将援用A存入常量池,返回给s。此时String("hello").intern()会返回常量池的援用A返回

应用示例

public static void main(String[] args) throws Exception {        String one = "st";        String two = new String("st");        String three = two.intern();        System.out.println(two == one);        System.out.println(three == one);    }---------------falsetrue

字符串和正则匹配、Matcher

字符阐明
\将下一字符标记为特殊字符、文本、反向援用或八进制本义符。例如,"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 是非负整数。至多匹配 n 次。例如,"o{2,}"不匹配"Bob"中的"o",而匹配"foooood"中的所有 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"范畴内的任何小写字母

应用示例

public static void main(String[] args) throws Exception {        String content = "I am st ! ";        String pattern = ".*st.*";        boolean isMatch = Pattern.matches(pattern, content);        System.out.println("字符串中是否蕴含了 'st' 子字符串? " + isMatch);    }---------------字符串中是否蕴含了 'st' 子字符串? true

StringBuffer和StringBuilder

StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,每次都要从新申请内存,不过StringBuffer和StringBuilder是当时申请缓存内存,在拼接变长且较长的字符串时,性能比String好

StringBuffer是线程平安的,每一次加减操作都是加上锁的;StringBuilder则是StringBuffer无锁版本。如果对线程平安不理解,倡议应用StringBuffer,不需思考加锁会带来性能的损耗,因为jvm会主动视状况优化为无锁操作

spring工具类StringUtils

public static boolean isEmpty(Object str)//是否含有空格符public static boolean containsWhitespace(CharSequence str) //截取两边空格符public static String trimWhitespace(String str)//替换所有空格符public static String trimAllWhitespace(String str)//获取文件名public static String getFilename(String path)

欢送指注释中谬误

参考文章

  • 对于String.intern()
  • String的Intern办法
  • Java 正则表达式