javascript字符串操作
一、字符串的創建
創建一個字符串有幾種方法。
1、最簡單的是用引號將一組字符包含起來 var myStr = "Hello, String!";// 在js中單雙引號沒有區別
2、可使用如下語句:var myStr1 = new String("Hello, String!");
console.log(typeof myStr);//"string" console.log(typeof myStr1);//"object"
以上輸出結果表明:myStr是一個簡單類型變量,myStr1是一個對象
二、字符串"長度“方法
1、字符串的拼接
concat()或者“+”
2、字符串的截取
1、string.substring(from, to) 返回截取的字符串
參數分別是截取的首尾索引位置。注意:參數to的索引可以大於、小於、等於from的位置,也可以省略,不支持負數!
var str = "colin is a desinger"; section = str .substring(0, 4); // "coli" section = str .substring(4, 0); // "coli" section = str .substring(1, 1); // "" section = str .substring(-2, 4); // "coli" str .substring(0, 4);// "coli"
console.log(str) //"colin is a desinger";
2、string.slice(start, end) 返回截取的字符串
參數start表示子串的起始位置,如果為負數,那么可以理解為倒數第幾個開始,例如-3表示從倒數第三個開始;參數end表示結束位置,與start一 樣, 它也可以為負數,其含義也表示到倒數第幾個結束。slice()的參數可以為負數,所以要比substring()更加靈活,但沒那么寬容了,如果 start比end要大,它將返回一個空字符串
var str = "colin is a desinger"; section = str .slice(0, 4); // "coli" section = str .slice(4, -1); // "n is a desinge" section = str .slice(1, 1); // "" str .slice(0, 4);// "" console.log(str);//"colin is a desinger"
3、substr(start,len) 返回截取的字符串
參數start為開始的位置,len為子字符串的長度 注:不提倡用該函數(我暫時也不知道原因)
三、字符串的“位置”函數
1、str.indexOf(searchvalue,fromindex) 返回字符串中一個子串第一處出現的索引(從左到右搜索)。如果沒有匹配項,返回 -1 。
2、str.charAt(index) 返回指定位置的字符
3、str.charCodeAt(index) 返回指定位置的字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數。
4、str.fromCharCode(numX,numX,...,numX) 可接受一個指定的 Unicode 值,然后返回一個字符串。
四、字符串的“正則”函數
1、威力最強的js字符串函數--> str.replace(regexp/substr,replacement)
改方法用於在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。
參數 replacement是字符串:對於正則replace約定了一個特殊標記符$:
-
- $i (i:1-99) : 表示從左到右正則子表達式所匹配的文本。
- $&:表示與正則表達式匹配的全文本。
- $`(`:切換技能鍵):表示匹配字符串的左邊文本。
- $’(‘:單引號):表示匹配字符串的右邊文本。
- $$:表示$轉移。
"boy & girl".replace(/(\w+)\s*&\s*(\w+)/g,"$2 & $1") //girl & boy "boy".replace(/\w+/g,"$&-$&") // boy-boy "javascript".replace(/script/,"$& != $`") //javascript != java "javascript".replace(/java/,"$&$' is ") // javascript is script
第二個參數為函數:
在ECMAScript3推薦使用函數方式,實現於JavaScript1.2.當replace方法執行的時候每次都會調用該函數,返回值作為替換的新值。
函數參數的規定:
- 第一個參數為每次匹配的全文本($&)。
- 中間參數為子表達式匹配字符串,個數不限.( $i (i:1-99))
- 倒數第二個參數為匹配文本字符串的匹配下標位置。
- 最后一個參數表示字符串本身。
String.prototype.capitalize = function(){ return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); };
2、str.match(rgExp)
如果 match 方法沒有找到匹配,將返回 null。 如果找到匹配,則 match 方法返回一個數組,並將更新全局 RegExp 對象的屬性以反映匹配結果。如果沒有設置全局標志 (g),數組元素 0 包含整個匹配,而元素 1 到 n 包含任何一個子匹配。 此行為與未設置全局標志時 exec 方法(正則表達式)(JavaScript) 的行為相同。如果設置了全局標志,則元素 0 到元素 n 包含所有出現的匹配。如果未設置全局標志,則 match 方法返回的數組有兩個特性:input 和 index。 input 屬性包含整個被搜索的字符串。 index 屬性包含了在整個被搜索字符串中匹配的子字符串的位置。如果設置了標志 i,則搜索不區分大小寫。
五、其他常用方法
1、stringObj.trim() 從字符串中移除前導空格、尾隨空格和行終止符。
2、str.toLowerCase() 小寫
3、str.toUpperCase() 大寫
。。。。。。。
六、字符串屬性
1、string.constructor 指定創建一個字符串的函數。
var x = new String(); if (x.constructor == String) document.write("Object is a String."); else document.write("Object is not a String."); // Output: // Object is a String.
2. string.prototype 為字符串的類返回原型的引用。
用 prototype 屬性為對象的類提供一組基本功能。 對象的新的實例“繼承”了賦予該對象的原型的行為。
例如,若要將方法添加到返回字符串的最后一個元素的值的 String 對象,請聲明函數、將它添加到 String.prototype 並使用它。
function string_last( ){ return this.charAt(this.length - 1); } String.prototype.last = string_last; var myString = new String("every good boy does fine"); document.write(myString.last()); // Ou
七、JavaScript 字符串是不可變的 --》無法修改字符串的長度。
首先請看以下代碼:
var a="java" a=a+"script" console.log(a);//"javascript"
變量a對應的字符串內容從”java“ 變為”javascript“,不是證明js字符串是可變的嗎?(我開始學js的時候也這么認為)
切記:你要理解內存中那塊區域不能改變。即第一樣的變量a所指的內存地址,不是二行變量a所指的內存地址
最后請看下面代碼:
var lang = 'Java'; lang[lang.length-1] = 'S'; lang[lang.length-1] = 'c'; console.log(lang);//"java" var arr = ['J', 'a', 'v', 'a']; arr[arr.length-1] = 'S'; console.log(arr);// ['J', 'a', 'v', 'S'];
八、巧用數組實現js數組高效拼接
var start = new Date(); var str = ""; for (var i = 0; i < 1000000; i++) { str += "test"; } var end = new Date(); document.writeln("+拼接字符串,耗時:" + (end.getMilliseconds() - start.getMilliseconds())); document.writeln("<br/>"); var begin = new Date(); var arry = new Array(); for (var i = 0; i < 1000000; i++) { arry.push("test"); } arry.join(""); var stop = new Date(); document.writeln("數組方式拼接字符串,耗時:" + (stop.getMilliseconds() - begin.getMilliseconds()));
九、回歸字符串創建
先看以下代碼:
var str="colin"; var str1=new String("colin"); str.substring(0,2); //str基本類型數據 ,為什么可以調用substring方法? str1.substring(0,2); //str1對象
這里為什么str變量有substring方法,我暫時也不是很明白。我姑且認為在執行“str.substring()"代碼的一瞬間,str變成了一個對象???!!
java字符串操作
一、字符串的創建
1、直接賦值 String str=”hello“;//這里必須要雙引號
2、使用new關鍵字 String str=new String("hello")
兩種創建方式的異同:
結論:采用第二種方式創建字符串時:系統會在堆內存中創建兩個”hello“,但是其中一個”hello“沒有的對應的棧內存指引,消耗多余內存,垃圾空間等待被回收。
所以推薦使用第一種方式創建字符串
二、字符串的常用方法
java的很多字符串方法的名字和用法都和js字符串方法類似。
1、public char charAt(int index) 返回指定索引處的 char
值
2、public String concat(String str) 將指定字符串連接到此字符串的結尾。
3、public int indexOf(String str,int fromIndex) 返回指定子字符串在此字符串中第一次出現處的索引,
。。。。
我覺得應該注意的幾個好玩方法:
1、public int length() 返回此字符串的長度 這里和js有着細微的區別
2、public boolean startsWith(String prefix, int toffset) 測試此字符串從指定索引開始的子字符串是否以指定前綴開始。
3、public boolean endsWith(String suffix) 測試此字符串是否以指定的后綴結束。
4、public char[] toCharArray() 將此字符串轉換為一個新的字符數組。
5、public void getChars(int srcBegin, int srcEnd,char[] dst,int dstBegin) 將字符從此字符串復制到目標字符數組。
三、字符串打的不可變性
看圖就可以,不多解釋
四、”另類字符串“
1、StringBuffer sb=new StringBuffer("df");//長度可變,
常用方法:
append()
insert()
replace()
indexOf()
2、StringBuilder sb =new StringBuilder("dsf")
特別適用在單個線程 速度比StringBuffer快
考慮線程安全時,用Stringbuffer比較好