1. 程式人生 > >基於正則表示式的字串位元組長度獲取

基於正則表示式的字串位元組長度獲取

場景描述:
比如資料庫表裡面有一個地址描述欄位,型別是varchar2(128)(128:表示可以儲存128位元組的內容),也就是說可以如果全是中文和中文字元的話可以儲存48個字元,如果是英文或者數字就可以儲存128個字元,所以需要進行校驗,判斷需要入庫的字串的位元組數;

方法1:使用正則表示式把中文和中文字元替換成英文或者數字,然後計算長度;
方法2:定義一個變數,遍歷整個字串,如果是是中文或者中文字元,加2,否則加1,最後得到總長度;

程式碼實現:

package com.zhh1;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 *
 * @author zhaoheng
 * 2018-07-20
 */
public class Test {
	public static void main(String[] args) {
		
		String name = "1E一,.";
		System.out.println(getStrByteLength(name));
	    System.out.println(getStrByteLength1(name));
	}
	
	/**
	 * 匹配
	 * 如果str符合regex的規則,則返回true否者返回false;
	 * @param str :待驗證的字元
	 * @param regex :正則表示式規則
	 * @return
	 */
	public static boolean checkMatch(String str, String regex)
	{
		boolean result =true;
		try
		{
			Pattern pattern = Pattern.compile(regex);
			Matcher matcher = pattern.matcher(str);
			result = matcher.matches();
		} catch (Exception e)
		{
			result = false;
		}
		return result;
	}
	
	/**
	 * 檢測字串的位元組數
	 * @param str 待檢測的字串
	 * @return 字串的位元組數
	 */
	public static long getStrByteLength(String str) {
		long length=0;
		for (int k = 0; k <str.length(); k++) {
			//判斷是否包含中文或者中文字元
			if (Test.checkMatch(String.valueOf(str.charAt(k)), "[\u0391-\uFFE5]")) {
				length+=2;
			}else {
				length+=1; 
			}
		}
		return length;
	}

	/**
	 * 檢測字串的位元組數
	 * @param str 待檢測的字串
	 * @return 字串的位元組數
	 */
	public static long getStrByteLength1(String str) {
		long length = str.replaceAll("[\u0391-\uFFE5]", "aa").length();
		return length;
	}
}

相關推薦

基於表示式字串位元組長度獲取

場景描述: 比如資料庫表裡面有一個地址描述欄位,型別是varchar2(128)(128:表示可以儲存128位元組的內容),也就是說可以如果全是中文和中文字元的話可以儲存48個字元,如果是英文或者數字就可以儲存128個字元,所以需要進行校驗,判斷需要入庫的字串的位元組數;

利用java表示式來解析並獲取指定的字串

Java的正則表示式不僅可以用來匹配驗證字串是否符合標準型別,還可以用來解析字串,獲取自己想要得到的資料。在java.util.regex包下提供了系列的類來對字串進行匹配。來看一下下面的例子: public static String parse (String s)

取得字串長度 並根據位元組擷取字串

/** *根據byte擷取字串 len:擷取長度 */ String.prototype.substrb = function(len){ var str1;       if(this.lengthb() <= len){           return t

Python指令碼--基於表示式對檔案進行解析

Python指令碼--基於正則表示式對檔案進行解析     首先需要了解正則表示式中的相應指令(compile、findall),我對此的理解是compile相當於一個規則的制定者,將匹配的規則制定出來,後續具體的操作是findall的工作【選擇適當的規則

使用表示式驗證密碼長度

實現效果:    知識運用:    實現程式碼: private void button1_Click(object sender, EventArgs e) { if (Validate(textBox1.Text.ToString()

密碼表示式,密碼長度大於6並且同時包含字母數字特殊字元

package com.desigin.listening; import java.util.regex.Matcher; import java.util.regex.Pattern; public class 密碼正則 { public static void main(Stri

python 表示式 字串的 匹配 替換 分割 查詢

In [1]: import re In [2]: str1='imooc video=1000' In [3]: str1.find('1000')#可以查找出索引值 Out[3]:

表示式的簡單語法及常用表示式 舉例使用jquery獲取url指定引數

基本符號: ^  表示匹配字串的開始位置  (例外  用在中括號中[ ] 時,可以理解為取反,表示不匹配括號中字串) $  表示匹配字串的結束位置 *  表示匹配 零次到多次 +  表示匹配 一次到多次 (至少有一次) ?  表示匹配零次或一次 .  表示匹配單個字元  |

Python 表示式限定文字長度

Regex Expression # Limit the string length between 1 and 10 letters (a-z, A-Z) ^[a-zA-Z]{1,10}$ eg.  match:       abceddddd no match:

linux下c/c++例項之五表示式字串匹配

一、簡介        標準的C和C++不支援正則表示式,但有一些函式庫可以輔助C/C++程式設計師完成這一功能。正則表示式常用函式:編譯正則表示式 regcomp()、匹配正則表示式 regexec()、釋放正則表示式 regfree()。 二、詳解 1、程式碼 re

java使用表示式從一長串字元中獲取一段特徵字串

只能說String工具類太強大,導致一直以來,幾乎沒怎麼用到過正則表示式,現在突然要用到,參考正則表示式語法,摸索一上午才搞出來。記錄分享一下,以免忘記 從一長串字元中,截取出邀請碼,我想很多人都遇到過。 String s = "邀請您加入隨心購,自動搜尋淘寶天貓優惠券!先領券,再購

JS_表示式_獲取指定字元之後指定字元之前的字串

一個常見的場景,獲取:標籤背景圖片連結: 如字串:var bgImg = "url(\"https://img30.360buyimg.com/sku/jfs/t26203/262/100869187/204098/1d1479e9/5b84b80bNf39db45f.jpg\")";   指

c# 用表示式獲取開始和結束字串中間的值

/// <summary> /// 獲得字串中開始和結束字串中間得值 /// </summary> /// <param name="str">字串</param> /// <param name="s">開始</param>

abap中檢查字串長度字串中是否有空格、前兩位是否為字元、表示式

IF i_mseg-charg <> ''.  "字串長度   CLEAR lv_len.   lv_len = strlen( i_mseg-charg ).   IF lv_len < 8.     MESSAGE e005(zmigo).   END

表示式——判斷字串組成,第一個必須是字母,後面可以是字母、數字、下劃線,總長度為5-20

//判斷字串是否是這樣組成的,第一個必須是字母,後面可以是字母、數字、下劃線,總長度為5-20 var c = /^[a-zA-Z]\w{4,19}$/; // /是轉義 ^ 是開頭 [

javascript使用表示式獲取查詢字串QueryString(轉載)

該方法大小寫敏感 <script> function fnOnload() { document.getElementById("SystemTree").src = "TreeList.aspx?PID=" + GetQueryString("PID");

過濾表情獲取過濾後的字元長度(通過表示式

import java.util.regex.Pattern; /** * Created by Basil on 2017/5/10 13:00 */ public class GetInputContentLengh { //加入白名單 public stat

java中用表示式獲取一個指定的子字元在字串中出現的指定次數的下標索引,並且進行字串分割

在開發中遇到這樣的一個報文: 00000123000003RQ0 ################ 000003 <tellerLvl0>0</><brc>3004</><fPIflag>0</><

Python通過表示式字串處理獲取方式獲取所需子字串的方式

       在爬蟲軟體時我們經常需要從url中尋找並獲取我們所需要的那一部分內容 此例我們需要從網址new_url= "http://news.sina.com.cn/c/gat/2017-06-14/doc-ifyfzfyz4058260.shtml"中獲取 fyfzf

採用表示式獲取某路徑下符合特定模式字串的檔名

#include "FindFileNameAccordExpr.h" FindFileNameAccordExpr::FindFileNameAccordExpr(string dir, string exprStr) {     _dir = dir;     _searchString = exp