String类中的trim()方法实现
生活随笔
收集整理的這篇文章主要介紹了
String类中的trim()方法实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
String 類中的 trim() 方法的作用是去除字符串前后的空字符串,自己寫代碼實現了一個 trim() 方法,并不斷優化.
代碼
public class MyString {private String str;private char[] chars;public MyString(String str) {this.str = str;this.chars = str.toCharArray();}/*** 先從右往左對空格進行刪除* 再從右往左對空格進行刪除* 例: _da_tou_* 第一次結果: uot_ad_* 第二次結果: da_tou** @return*/public String trim1() {char[] newChars = new char[str.length()];// 1.第一次從右往左刪除空格int index = 0;char[] chars = str.toCharArray();boolean preFlag = false;for (int i = chars.length - 1; i > -1; i--) {if (chars[i] == 0) {continue;}if (!preFlag && ' ' == chars[i]) {continue;} else {preFlag = true;newChars[index++] = chars[i];}}// 2.第二次從右往左刪除空格index = 0;char[] newChars2 = new char[newChars.length];preFlag = false;for (int i = newChars2.length - 1; i > -1; i--) {if (newChars[i] == 0) {continue;}if (!preFlag && ' ' == newChars[i]) {continue;} else {preFlag = true;newChars2[index++] = newChars[i];}}return new String(newChars2);}/*** 同時從兩端開始遍歷字符串,并記錄結束下標** @return*/public String trim2() {char[] chars = str.toCharArray();int i = 0;int j = chars.length - 1;boolean preFlag = false;boolean suffFlag = false;while (i < j && (!preFlag || !suffFlag)) {// 從左往右遍歷if (!preFlag && ' ' == chars[i]) {i++;} else {preFlag = true;}// 2.從右往左遍歷if (!suffFlag && ' ' == chars[j]) {j--;} else {suffFlag = true;}}return str.substring(i, j + 1);}/*** 同時從兩端開始遍歷字符串,并記錄結束下標* 去掉標志位** @return*/public String trim3() {int i = 0;int j = chars.length - 1;// 只需要循環字符串長度一半的次數就能達到目標for (int k = 0; k < chars.length / 2 + 1; k++) {// 如果需要減少循環次數,可以添加下面的代碼/*if(' ' != chars[i] && ' ' != chars[j]) {break;}*/// 從左往右遍歷if (' ' == chars[i]) {i++;}// 2.從右往左遍歷if (' ' == chars[j]) {j--;}}// 如果字符串全部由空字符串組成,會出現 i > j 的情況return i > j ? "" : str.substring(i, j + 1);}/*** 同時從兩端開始遍歷字符串,并記錄結束下標* 減少循環次數** @return*/public String trim4() {int i = 0;int j = chars.length - 1;//while (i < j && (' ' == chars[i] || ' ' == chars[j])) {// 從左往右遍歷if (' ' == chars[i]) {i++;}// 2.從右往左遍歷if (' ' == chars[j]) {j--;}}// 如果字符串全部由空字符串組成,會出現 i > j 的情況return i < j ? str.substring(i, j + 1) : "";}/*** 先從左到右遍歷* 再從右到左遍歷* 最后截取字符串* 如果只使用一個 while 循環,循環體里面需要進行判斷** @return*/public String trim5() {int i = 0;int j = chars.length;while (i < j && ' ' == chars[i]) {i++;}while (j > i + 1 && ' ' == chars[j - 1]) {j--;}return (i > 0 || j < chars.length) ? str.substring(i, j) : str;}/*** String 類中的原生 trim() 方法** @return*/public String trim() {int len = chars.length;int st = 0;char[] val = chars; /* avoid getfield opcode */while ((st < len) && (val[st] <= ' ')) {st++;}while ((st < len) && (val[len - 1] <= ' ')) {len--;}return ((st > 0) || (len < chars.length)) ? str.substring(st, len) : str;}}總結
- 對于 trim() 方法這種刪除前后字符串的,通過記錄下標比保存中間量要好很多.
總結
以上是生活随笔為你收集整理的String类中的trim()方法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自用MATLAB2012a安装教程
- 下一篇: Linux BT下载(2)-B编码和种子