利用字元編碼集對中文長度的不同來判斷字串中有沒有中文
是這樣的,在日常開發中遇到一個問題:判斷一個字串中是否含有中文。本來是很簡單的一個需求,用正則就搞定了。然而這是一個很老舊的一個系統,有自己的一套開發語言。偏偏不支援正則,這就難住我了。
當時想到一個笨辦法:把三千個常用漢字寫在一個配置檔案中,把要判斷的字串分割為一個個字元,一個個的去配置檔案中找,看能不能找到,能找到就是含有中文,沒找到就是沒有。。。。幸虧我沒用這個方法,實在有點笨,有點丟人。
後來又看到一篇文章,是講中文在不同編碼下字符集長度不同的問題。這一下就給我啟發了,我把字串轉為不同的編碼,比較兩者的長度不就判斷有沒有中文了嗎。
當時用的兩個編碼, 一個是ANSI,一個是UTF-8.
這兒解釋一下ANSI,這是對ASCII編碼的擴充套件。這是一個編碼字符集,裡面就包括了中國地區用的GB2312,韓國用的Euc-kr。作業系統會根據地區的不同,選擇不同的ANSI編碼,中國地區就選擇GB2312。
在ANSI也就是GB2312編碼中,中文、英文到度是兩個位元組。而UTF-8中,英文的長度是兩個位元組,中文的長度是三個位元組。這中間的差值就是判斷是否有中文的字元的依據了。我們還能根據這個差值判斷有多少箇中文字元。
考慮到輸入的內容基本只會有中文、英文、符號等,不會出現韓文、日文這些文字,可以認為這個問題解決!
相關推薦
利用字元編碼集對中文長度的不同來判斷字串中有沒有中文
是這樣的,在日常開發中遇到一個問題:判斷一個字串中是否含有中文。本來是很簡單的一個需求,用正則就搞定了。然而這是一個很老舊的一個系統,有自己的一套開發語言。偏偏不支援正則,這就難住我了。 當時想到一個笨辦法:把三千個常用漢字寫在一個配置檔案中,把要判斷的字串分割為一個個字元,一個個的去配置檔案中找,看能不能
python 判斷字串中是否只有中文字元
python中的encode和decode: 首先,在python中字串的表示是 用unicode編碼。所以在做編碼轉換時,通常要以unicode作為中間編碼。 decode的作用是將其他編碼的字串轉換成unicode編碼,比如 a.decode('utf-8')
PHP判斷字串中是否含有中文
<? $str = "測試中文"; echo $str; echo "<hr>"; //if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) { //只能在GB2312情況下使用 //if (preg_match("
JS判斷字串中是否存在中文
正則表示式: function isChinese(str){ var patrn=/[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; if(!patrn.e
javaI/O——字元編碼集、記憶體操作流、列印流、System類對I/O的支援
一、字元編碼集 1.常用的字元編碼 我們以前在notpad++中編寫程式碼執行的時候,如果程式碼中有漢字,但是我們在編譯的時候並沒有使用-encoding UTF-8的時候就會出現亂碼的現象。這是因為字元編碼目的原因;因為不指定用什麼樣 的方式進行編碼的時候,對於漢字就識別不了,這樣的話就會
java中字元編碼格式對中文的影響
中文字元以不同的編碼格式會佔用不同的位元組數,以gbk編碼每一箇中文字元會佔據兩個位元組,以utf-8編碼每個中文字元會佔據3個位元組。 public class Test { public static void main(String[] args) throws U
MySQL入門--建立資料庫、顯示警告資訊、顯示資料庫、顯示資料庫建立資訊、指定字元編碼集
1、建立資料庫: CREATE DATABASE t1; 同一條語句不能寫兩次,也就是不能建立,否則會提示錯誤警告 2、顯示警告資訊: SHOW WARNINGS; 3、顯示所有的
組合(從長度為n的字串中取m個字元)---java兩種實現方法
對於這類組合問題,雖然感覺很簡單,但是用java程式碼實現起來卻不是那麼容易的。 這其中最容易用到的應該是遞迴的思想了,這種方法也比較容易理解: 方法一: 遞迴實現程式碼: /** * 可能種類在4000萬的時候時間效率為7.6s左右
Java判斷一個字串中是否包含中文字元工具類
Java判斷一個字串是否有中文一般情況是利用Unicode編碼(CJK統一漢字的編碼區間:0x4e00–0x9fbb)的正則來做判斷,但是其實這個區間來判斷中文不是非常精確,因為有些中文的標點符號比如:,。等等是不能識別的。 以下是比較完善的判斷方法:CharUtil.j
中文亂碼 encodeURI來解決URL傳遞時的中文問題
影響 文字 ring class detail pla 解碼 http 效果 解決中文亂麻問題,頁面端發出的數據作兩次encodeURI var name="張三"; encodeURI(encodeURI(name)); 後臺解碼: URLDecoder.dec
leetcode-219-Contains Duplicate II(使用set來判斷長度為k+1的閉區間中有沒有重復元素)
復雜度 存在 限制 ret ras out ++ 出現 mis 題目描述: Given an array of integers and an integer k, find out whether there are two distinct indices i and
字串中有特殊字元的處理
用正則表示式進行轉換處理 使用正則表示式也是一種常用的處理方式,實現原理就是使用替換的方式來實現轉碼和解碼,轉碼時把<>,空格符,&,’,""替換成html編碼,解碼就把html編碼替換成對應的字元,實現程式碼如下: var HtmlUtil = { /1.用正則
PostgreSQL: 如何判斷字串中是否包含指定字元。
今天有開發人員問到: PostgreSQL 中是否有函式可以判斷一個字串中是否包含指定字元,如果包 含則返回 ture ,否則返回 false,例如,如果字串 'abcde' 中包含 'ab' 則返回 true,於是想了想,共總 結以下三種方法,暫且不考慮效能。 一 方法一: 使用
java中使用Map集合判斷字串中字元出現次數
import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Scanner; import java.util.S
sort函式的用法(C++排序庫函式的呼叫)對陣列進行排序,在c++中有庫函式幫我們實現,這們就不需要我們自己來程式設計進行排序了。
對陣列進行排序,在c++中有庫函式幫我們實現,這們就不需要我們自己來程式設計進行排序了。 (一)為什麼要用c++標準庫裡的排序函式 Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用
棧應用:判斷字串中括號是否成對出現
練習題目利用棧先將後出的特性,判斷字串中的數字表達式括號是否成對匹配,如果沒有給出錯誤位置資訊提示。程式碼實現程式碼思路很簡單,如果是左括號將左括號 就入棧,遇到右括號 棧中的左括號出棧。如果該出棧的時
如何在Java程式碼中檢查字串中是否包含中文?
今天和同事在討論一個問題,需要檢查“輸入的字串中是否包含中文”,剛開始想到是用正則表示式,正則表示式中是以[u4e00-u9fa5]來全匹配字元是否是中文,但現在面臨的問題是這個字串中還可能包含英文字元、數字、特殊字元,一時也沒想出能匹配該場景的正則表示式,後來在網上搜了下,可以使用Matcher類
SQL中判斷字串中包含字元的方法
6. 函式判斷字串不包含任何符號(除空格外) CREATE FUNCTION [dbo].fn_IsAlphanumericBlank ( @pString VARCHAR(8000) ) RETURNS bit WITH ENCRYPTION AS BEGIN DECLARE @vJudge int SET
c#輸入一個字串,並把字串的第一個字元變為大寫,如果字串中有空格則把空格的下個字元變為大寫之後輸出
using System; using System.Collections.Generic; using System.Text.RegularExpressions; delegate int MyDelegate();//相當於c函式指標 namespace c
java 判斷字串中 大小寫字母 數字和其他字元個數方法
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import qian.com.PrinTool; //定義一個判斷字串中