成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基礎篇:String字符串操作-必知必備

開發 前端
string.intern();intern先判斷常量池是否存相同字符串,存在則返回該引用;否則在常量池中記錄堆中首次出現該字符串的引用,并返回該引用。

[[401878]]

本文轉載自微信公眾號「潛行前行」,作者cscw。轉載本文請聯系潛行前行公眾號。

前言

字符串的常用操作,記一下。如果有字符串的操作小技巧,好用的工具類,歡迎補全。大家隨意點贊,隨意看看

  • String實現原理
  • String常用方法
  • 字符串的緩存池和String.intern
  • 正則匹配和字符串
  • StringBuffer和StringBuilder
  • spring工具類StringUtils

String實現原理

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

String有一個value的字符數組,用來保存字符串的。默認編碼是utf-8

String常用方法

  1. //從toffset開始,是否以prefix開頭 
  2. public boolean startsWith(String prefix, int toffset) 
  3. //str出現的最后一次的下標 
  4. public int lastIndexOf(String str) 
  5. //返回下標在beginIndex和endIndex之間的字符串 
  6. public String substring(int beginIndex, int endIndex) 
  7. //連接str,并返回一個新的字符串 
  8. public String concat(String str) 
  9. //匹配regex正則表達式 
  10. public boolean matches(String regex)  
  11. //替換字符 
  12. public String replace(char oldChar, char newChar) 
  13. //替換字符串 
  14. public String replace(CharSequence target, CharSequence replacement) 
  15. //獲取charsetName編碼的字節數組 
  16. public byte[] getBytes(String charsetName) 
  17. //獲取 
  18. public int codePointAt(int index
  19. //分割 
  20. public String[] split(String regex, int limit) 
  21. //轉成小寫 
  22. public String toLowerCase() 
  23. //轉成大寫 
  24. public String toUpperCase()  
  25. //截取前后空格 
  26. public String trim() 
  27. //elements使用delimiter作為連接符,合并成一個新字符串 
  28. public static String join(CharSequence delimiter, CharSequence... elements)    
  29. public static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements) 
  30. //args參數填充進format的占位符,并返回新字符串 
  31. public static String format(String format, Object... args) 
  32. //轉為緩存池的字符串 
  33. public native String intern() 

使用示例

  1. String data = "String字符串操作-必知必備"
  2. System.out.println(data.startsWith("St",0)); 
  3. System.out.println(data.startsWith("St",5)); 
  4. ---------- 
  5. true 
  6. false 

字符串的格式化輸出

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

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

字符串的緩存池和String.intern

string.intern();intern先判斷常量池是否存相同字符串,存在則返回該引用;否則在常量池中記錄堆中首次出現該字符串的引用,并返回該引用。

如果是先執行 String s = "st" ;相當于執行了intern();先在常量池創建"st",并且將引用A存入常量池,返回給s。此時String("hello").intern()會返回常量池的引用A返回

使用示例

  1. public static void main(String[] args) throws Exception { 
  2.         String one = "st"
  3.         String two = new String("st"); 
  4.         String three = two.intern(); 
  5.         System.out.println(two == one); 
  6.         System.out.println(three == one); 
  7.     } 
  8. --------------- 
  9. false 
  10. 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"范圍內的任何小寫字母

使用示例

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

StringBuffer和StringBuilder

StringBuffer、StringBuilder和String一樣,也用來代表字符串。String類是不可變類,每次都要重新申請內存,不過StringBuffer和StringBuilder是事先申請緩存內存,在拼接變長且較長的字符串時,性能比String好

StringBuffer是線程安全的,每一次加減操作都是加上鎖的;StringBuilder則是StringBuffer無鎖版本。如果對線程安全不了解,建議使用StringBuffer,不需考慮加鎖會帶來性能的損耗,因為jvm會自動視情況優化為無鎖操作

spring工具類StringUtils

  1. public static boolean isEmpty(Object str) 
  2. //是否含有空格符 
  3. public static boolean containsWhitespace(CharSequence str)  
  4. //截取兩邊空格符 
  5. public static String trimWhitespace(String str) 
  6. //替換所有空格符 
  7. public static String trimAllWhitespace(String str) 
  8. //獲取文件名 
  9. public static String getFilename(String path) 

歡迎指正文中錯誤

參考文章

  • 關于String.intern()[1]
  • String的Intern方法[2]
  • Java 正則表達式[3]

 

責任編輯:武曉燕 來源: 潛行前行
相關推薦

2021-01-15 10:03:18

JDK8日期API

2021-05-28 10:02:05

Swift5 字符串String

2015-03-23 17:18:18

Java字符串問題

2011-07-05 13:59:23

XML

2013-03-15 09:42:43

網絡管理員網絡架構主板跳線設置

2023-07-30 09:50:51

Bash字符串

2012-11-06 10:51:50

2023-10-26 18:05:37

Git命令差異

2010-07-14 12:57:59

Perl字符串

2015-06-09 14:43:36

javascript操作字符串

2009-08-24 13:04:44

操作步驟C#字符串

2013-12-12 17:08:24

Lua字符串

2024-12-05 10:29:13

Rust字符串類型

2024-11-28 09:21:00

Python字符串代碼

2021-07-03 10:02:30

Python字符串瀏覽器

2021-03-04 08:34:54

Java交換變量字符串基礎

2021-03-11 10:00:32

Java字符串開發

2021-12-08 14:02:20

符串排列搜索

2010-12-06 09:06:09

2020-03-30 15:25:14

Vim編輯器Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级大片免费看 | av在线成人 | 中文字幕在线国产 | 国产精品成人在线观看 | 日韩中文字幕在线播放 | 国产精品一区二区免费 | 一区二区视频在线观看 | dy天堂| av片网站 | 亚洲三级在线观看 | 久久成人一区二区三区 | 亚洲免费网站 | 亚洲aⅴ | 国产成人免费视频网站高清观看视频 | 亚洲3级 | 99reav| 亚洲激情视频在线 | 毛片a| 亚洲精品白浆高清久久久久久 | 国产探花在线精品一区二区 | 色花av| 四虎伊人 | 中文字幕动漫成人 | 久久精品亚洲欧美日韩精品中文字幕 | www.免费看片.com| 国产黄a一级| 一级黄片一级毛片 | 国产一级毛片视频 | 在线视频一区二区 | 亚洲精品66 | 国产乱码精品一品二品 | 国产玖玖 | 午夜精品91 | 超碰男人天堂 | 午夜影院在线观看免费 | 美日韩中文字幕 | 日日日操 | 欧美日韩国产精品激情在线播放 | 国产精品久久久亚洲 | 国产精品久久精品 | 视频精品一区 |