1. 程式人生 > >【Java|Android】字串工具類

【Java|Android】字串工具類

摘自:https://github.com/cundong/ZhihuPaper

import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * 類說明: 字串操作類
 * 
 * @author Cundong
 * @date Feb 7, 2012 2:51:58 AM
 * @version 1.0
 */
public class StringUtils {
	public static final String[] EMPTY_STRING = new String[0];

	/**
	 * 判斷給定字串是否空白串。<br>
	 * 空白串是指由空格、製表符、回車符、換行符組成的字串<br>
	 * 若輸入字串為null或空字串,返回true
	 * 
	 * @param input
	 * @return boolean
	 */
	public static boolean isBlank(String input) {
		if (input == null || "".equals(input))
			return true;

		for (int i = 0; i < input.length(); i++) {
			char c = input.charAt(i);
			if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
				return false;
			}
		}
		return true;
	}

	/**
	 * 若輸入為null,則返回空字串;否則返回字串自身
	 * 
	 * @param
	 * @return
	 */
	public static String getNotNull(String input) {
		return (input == null ? "" : input);
	}

	public static String getNotNull(String input, String defaultValue) {
		return (isBlank(input) ? defaultValue : input);
	}

	/**
	 * 擷取字串末尾空格
	 * 
	 * @param input
	 * @return
	 */
	public static String trim(String input) {
		if (isBlank(input))
			return "";
		return input.trim();
	}

	/**
	 * 根據指定分隔符分割字串,返回結果陣列。<br>
	 * 處理規則:<br>
	 * 若輸入為null,則返回null;<br>
	 * 否則若輸入為空字串,則返回空陣列;<br>
	 * 否則若分隔符為null或空字串,則返回包含原字串本身的陣列;<br>
	 * 
	 * @param input
	 *            輸入字串
	 * @param separator
	 *            分隔符
	 * @return 結果陣列(注意:包括空字串)
	 */
	public static String[] split(String input, String separator) {
		if (input == null)
			return null;
		if (input.equals(""))
			return EMPTY_STRING;
		if (separator == null || "".equals(separator))
			return new String[] { input };

		int cursor = 0; // 遊標
		int lastPos = 0; // 指向上一個分隔符後第一個字元
		ArrayList<String> list = new ArrayList<String>();

		while ((cursor = input.indexOf(separator, cursor)) != -1) {

			String token = input.substring(lastPos, cursor);
			list.add(token);

			lastPos = cursor + separator.length();

			cursor = lastPos;
		}

		if (lastPos < input.length())
			list.add(input.substring(lastPos));

		return (String[]) list.toArray(new String[list.size()]);
	}

	/**
	 * 字串替換
	 * 
	 * @param source
	 * @param oldstring
	 * @param newstring
	 * @param caseInsensive
	 * @return
	 */
	public static String replaceString(String source, String oldstring, String newstring, boolean caseInsensive) {
		Matcher matcher = null;

		// 區分大小寫
		if (caseInsensive) {
			matcher = Pattern.compile(oldstring, Pattern.CASE_INSENSITIVE).matcher(source);
		} else {
			matcher = Pattern.compile(oldstring).matcher(source);
		}

		return matcher.replaceAll(newstring);
	}

	/**
	 * 清除字串末尾的特定字元<br>
	 * 若字串末尾並非給定字元,則什麼都不做<br>
	 * 注意:該方法改變了傳入的StringBuffer引數的值
	 * 
	 * @param sb
	 *            字串快取
	 * @param tail
	 *            使用者給定字元
	 * @return 字串快取物件的字串表示
	 */
	public static String trimTail(StringBuffer sb, char tail) {
		if (sb.length() > 0 && sb.charAt(sb.length() - 1) == tail)
			sb.deleteCharAt(sb.length() - 1);
		return sb.toString();
	}

	/**
	 * 根據指定分隔符分割字串,返回結果陣列。<br>
	 * 處理規則:<br>
	 * 若輸入為null,則返回null;<br>
	 * 否則若輸入為空字串,則返回空陣列;<br>
	 * 否則若分隔符為null或空字串,則返回包含原字串本身的陣列;<br>
	 * 注意:返回結果中過濾掉空字串
	 * 
	 * @param input
	 *            輸入字串(數字字串)
	 * @param separator
	 *            分隔符
	 * @return 結果陣列(注意:不包括空字串)
	 */
	public static Integer[] splitInt(String input, String separator) {
		if (input == null)
			return null;
		if (input.equals(""))
			return null;
		if (separator == null || "".equals(separator))
			return null;

		int cursor = 0; // 遊標
		int lastPos = 0; // 指向上一個分隔符後第一個字元
		ArrayList<Integer> list = new ArrayList<Integer>();

		while ((cursor = input.indexOf(separator, cursor)) != -1) {

			if (cursor > lastPos) {// 濾掉空字串
				int token = Integer.parseInt(input.substring(lastPos, cursor));
				list.add(token);
			}

			lastPos = cursor + separator.length();

			cursor = lastPos;
		}

		if (lastPos < input.length())
			list.add(Integer.parseInt(input.substring(lastPos)));

		Integer[] iStrToI = new Integer[list.size()];
		for (int i = 0; i < list.size(); i++) {
			iStrToI[i] = Integer.parseInt(list.get(i).toString());
		}
		return iStrToI;
	}

	/**
	 * 字串的轉義(處理特殊字元)
	 * 
	 * @param input
	 * @return
	 */
	public static String StringToString(String input) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < input.length(); i++) {
			char c = input.toCharArray()[i];
			switch (c) {
			case '\'':
				sb.append("\\\'");
				break;
			case '\"':
				sb.append("\\\"");
				break;
			case '\\':
				sb.append("\\\\");
				break;
			case '/':
				sb.append("\\/");
				break;
			case '\b':
				sb.append("\\b");
				break;
			case '\f':
				sb.append("\\f");
				break;
			case '\n':
				sb.append("\\n");
				break;
			case '\r':
				sb.append("\\r");
				break;
			case '\t':
				sb.append("\\t");
				break;
			default:
				sb.append(c);
				break;
			}
		}
		return sb.toString();
	}

	/**
	 * list 轉換為 string
	 * 
	 * @param list
	 * @param flag
	 * @return
	 */
	public static String listToString(ArrayList<String> list, String flag) {
		String strMsg = "";
		int listSize = list.size();
		if (listSize > 0) {
			for (int i = 0; i < listSize; i++) {
				if (i == listSize - 1) {
					strMsg = strMsg + list.get(i).toString();
				} else {
					strMsg = strMsg + list.get(i).toString() + flag;
				}
			}
		} else {
			strMsg = "";
		}
		return strMsg;
	}

	/**
	 * 字串轉換為arraylist(必須符合這樣的格式([{"a":"a","b":"b"},{"a":"a","b":"b"},{}]))
	 * 
	 * @param strList
	 * @return (成功為 arrayList 失敗 Exception)
	 * 
	 */
	public static ArrayList<Object> strToList(String strList) {

		JSONObject oJsonObj = null;
		ArrayList<Object> listStr = new ArrayList<Object>();
		int iStriList = strList.length(); // 長度
		String strDemoList = strList.substring(1, iStriList - 1);// 幹掉 []
		String[] arrInfo = StringUtils.split(strDemoList, "},");
		int iArrInfo = arrInfo.length;
		for (int i = 0; i < iArrInfo; i++) {
			HashMap<String, String> paperMsg = new HashMap<String, String>();
			try {
				if (!arrInfo[i].endsWith("}")) {
					oJsonObj = new JSONObject(arrInfo[i] + "}");
				} else {
					oJsonObj = new JSONObject(arrInfo[i]);
				}
				Iterator<?> iter2 = oJsonObj.keys();
				while (iter2.hasNext()) {
					String key = iter2.next().toString();
					paperMsg.put(key, oJsonObj.get(key).toString());
				}
				listStr.add(paperMsg);// 新增list
			} catch (JSONException e) {

				// 出現異常 清空List
				listStr.clear();
				listStr.add(0, "Exception");
			}
		}
		return listStr;
	}

	/**
	 * InputStream轉為字串
	 * 
	 * @param in
	 * @return
	 */
	public static String toString(InputStream in) throws IOException {
		StringBuffer out = new StringBuffer();
		byte[] buffer = new byte[1024];
		for (int i; (i = in.read(buffer)) != -1;) {
			out.append(new String(buffer, 0, i));
		}
		return out.toString();
	}

	/**
	 * 對字串中的中文進行編碼
	 * 
	 * @param inputUrl
	 * @return
	 */
	public static String encodeUrl(String inputUrl) {

		if (isBlank(inputUrl))
			return inputUrl;

		char[] charArray = inputUrl.toCharArray();
		for (int i = 0; i < charArray.length; i++) {
			if ((charArray[i] >= 0x4e00) && (charArray[i] <= 0x9fbb)) {
				inputUrl = inputUrl.replaceFirst(String.valueOf(charArray[i]), URLEncoder.encode(String.valueOf(charArray[i])));

			}
		}
		return inputUrl;
	}

	/**
	 * 擷取字串
	 * 
	 * @param inputUrl
	 * @param length
	 * @return
	 */
	public static String subString(String inputUrl, int length) {
		if (isBlank(inputUrl))
			return inputUrl;

		if (inputUrl.length() > length) {
			return inputUrl.substring(0, length);
		} else {
			return inputUrl;
		}
	}
}


相關推薦

Java|Android字串工具

摘自:https://github.com/cundong/ZhihuPaper import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java

JavaMD5工具,解決中文轉MD5不一致問題。

import java.security.MessageDigest; public class MD5Util { /** * * @Title: MD5 *

Java工具——資原始檔解析PropertiesUtil

package com.luang.util.properties;   import java.io.File;   import java.io.FileInputStream;     import java.io.FileOutputStream;    

轉載C#工具:Json操作幫助

哈希表 封裝 bst repl 遇到 json serial 轉載 res Json序列化和反序列化在程序開發中時常會遇到,在C#中可以使用很多種方法實現對數據的Json序列化和反序列化,封裝一個Json操作工具類來簡化相應的操作,該工具類中包含以下功能:對象轉JSON、數

安卓常用工具-StringUtilsString字串工具

判斷字串是否為空,專案中用的太多了。必須封裝起來!另外判斷集合是否為空用的也很多,這裡也放到一起~ package com.example.burro.demo.appframework.util;

附原始檔軟體工具Web原型製作分享 - Sketch

Sketch是一款輕量,易用的向量設計工具。專門為UI設計師開發,讓UI設計更簡單、更高效。   本原型由國產原型工具-Mockplus製作完成。   非常適合工具類產品官網使用,本模板的互動有通過使用面板元件,實現了列表的摺疊效果。  

附原始檔軟體工具Web原型製作分享

Sketch是一款輕量,易用的向量設計工具。專門為UI設計師開發,讓UI設計更簡單、更高效。 非常適合工具類產品官網使用,本模板的互動有通過使用面板元件,實現了列表的摺疊效果。 以上設計的所有頁面可以在這裡下載分享。 所有頁面的圖片集(5

我的Java筆記集合工具_Collections

Collections類 1.概述:針對Collection集合操作的工具類 2.常用方法: (1)public static <T> void sort(List<T> l

java reflection反射工具總結

這段時間公司搞封閉開發,做一個聯通總部的客服系統專案,是基於springboot的。在開發工程中遇到一個頁面datagrid資料排序的功能,因為有多個表的資料都要用到排序功能,於是我就寫了一個排序功能的公共實現類,方便大家使用。在寫實現類的過程中需要通過反射去呼

Latex常用工具

struct blog code ima input provides vid aspect 常用 字體篇: \usepackage{color} {\color{red}{Hello World!}}   表格篇: 1.resizebox

TomcatTomcat的加載機制

圖片 -a content 部署 編譯 img webapp tro clas 在Tomcat中主要有以下幾種類加載器:(圖片來自網絡) tomcat啟動時,會創建幾種類加載器: 1 Bootstrap 引導類加載器 加載JVM啟動所需的類,以及標準擴展類,位於jre/

Pythonpython動態

引用變量 區分 如何工作 回收 new images 如何 空間 簡單的 在python中,省去了變量聲明的過程,在引用變量時,往往一個簡單的賦值語句就同時完成了,聲明變量類型,變量定義和關聯的過程,那麽python的變量到底是怎樣完成定義的呢? 動態類型  

java數據

相互 需要 long 3.2 方式 強制 boolean als src 邏輯型boolean: boolean類型數據只能取值True或False,不可以0或者非0替代True或False,這點與c語言不同。 字符型char: 一個char類型的字符占兩個字節。表示方式

PHP$_SERVER的

方式 ref itl color cnblogs cas nbsp cti strong 1.$_SERVER[‘HTTP_USER_AGENT‘]:strpos($_SERVER[‘HTTP_USER_AGENT‘], ‘MicroMessenger’) MicroMes

練習友元和友元函數

turn main spa std return col print pri circle #include <iostream> using namespace std; class Circle; class Point { private: fl

IDEA設置頭註釋和方法註釋

註釋 rep col 9.png return parameter lis size ron idea和eclipse的註釋還是有一些差別的。 類頭註釋:   打開file->setting->Editor->Filr and Code Temp

收集PHP另shell

vars span 路徑 mage jpg lib get 匹配 交互式 $f = $_GET[‘f‘]; include_once(‘sys/config.php‘); include($f); php偽協議: file:// — 訪問本地文件系統ht

02GitHub 工具 Octotree

google ali web data sof oat open chrom get #推薦一個 GitHub 工具Octotree Chrome extension它可以讓你在看任何倉庫時,獲得一個左邊的樹狀圖。【02】GitHub 工具 Octotree

02markdown工具推薦

home end cor linux microsoft inux ofo normal index 【02】信息Windows 平臺MarkdownPadMarkPadLinux 平臺ReTextMac 平臺Mou最新版Mac OS下Mou已經無法使用了。這裏推薦一個跨平

Python數據

數字 list bool int 字典 code 數據類型 asd python 數字(int) # 字符串(str) 阿薩德 列表(list) 阿薩德 元祖() 阿薩德 字典(dict) asd 布爾(bool) asd 【Python】數據類型