关于java:基础篇String字符串操作-必知必备

58次阅读

共计 3782 个字符,预计需要花费 10 分钟才能阅读完成。

前言

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

  • 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));
----------
true
false

字符串的格式化输入

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);
    }
---------------
false
true

字符串和正则匹配、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 正则表达式

正文完
 0