最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java代碼實現(xiàn)判斷字符串是否為亂碼

 更新時間:2026年03月26日 09:16:55   作者:劉大貓.  
這篇文章主要為大家詳細(xì)介紹了如何使用java代碼實現(xiàn)判斷字符串是否為亂碼,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、介紹

字符串亂碼檢測:一個簡單但局限的實現(xiàn)方案

這段代碼實現(xiàn)了一個基于ASCII可打印字符范圍的亂碼檢測函數(shù),通過正則表達式判斷字符串是否包含非標(biāo)準(zhǔn)ASCII字符。

public static boolean isGarbage(String str) {
    //檢查字符串是否為空
    if (str == null I str.isEmpty()) {
        return true;//認(rèn)為空字符串是亂碼
    }
    //使用正則表達式檢查字符串是否只包含可打印字符
    //可打印字符范圍:0x20(space)到0x7E(tide)
    return !str.matches("[\\x20-\\x7E]*");
}

工作原理:

  • 正則表達式[\\x20-\\x7E]*匹配所有ASCII可打印字符(空格到波浪號)
  • 如果字符串完全由這些字符組成,返回false(不是亂碼)
  • 否則返回true(認(rèn)為是亂碼) 

二、代碼

public class StringUtils {

    // 判斷字符串是否為亂碼
    public static boolean isGarbage(String str) {
        // 檢查字符串是否為空
        if (str == null || str.isEmpty()) {
            return true; // 認(rèn)為空字符串是亂碼
        }

        // 使用正則表達式檢查字符串是否只包含可打印字符
        // 可打印字符范圍: 0x20 (space) 到 0x7E (tilde)
        // 這里可以根據(jù)實際需求調(diào)整
        return !str.matches("[\\x20-\\x7E]*");
    }

    public static void main(String[] args) {
        String test1 = "???????????"; // 亂碼
        String test2 = "W1111A1111"; // 正常字符串

        System.out.println("Test 1 is garbage: " + isGarbage(test1)); // true
        System.out.println("Test 2 is garbage: " + isGarbage(test2)); // false
    }
}

三、方法補充

1.java判斷字符串是否為亂碼

java.nio.charset.Charset.forName("GBK").newEncoder().canEncode("測試") //判斷是不是GBK編碼 即是否亂碼
//使用request.getQueryString()獲取通過URL傳過來的值 有可能是亂碼 如:q=é?¥
String s = request.getQueryString();
if(s!=null){
    if(!(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(s))){
        try {
            s = new String(request.getQueryString().getBytes("ISO-8859-1"),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

2.Java判斷文字是否亂碼

該代碼段提供了一個Java方法,用于檢測字符串是否包含亂碼。它首先去除字符串中的空白字符和標(biāo)點符號,然后判斷剩余字符是否為數(shù)字、英文或中日韓文字。如果非這些字符的比例超過40%,則認(rèn)為字符串包含亂碼。

/**
	 * 判斷字符串是否是亂碼
	 *
	 * @param strName 字符串
	 * @return 是否是亂碼
	 */
	public static boolean isMessyCode(String strName) {
		float count = 0;
		//去除字符串中的空格 制表符 換行 回車
		Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*");
		Matcher m = p.matcher(strName);
		String after = m.replaceAll("");
		//去除字符串中的標(biāo)點符號
		String temp = after.replaceAll("\\p{Punct}", "").replaceAll("“|”|!|:|,|?|、|…|\\+","").replaceAll(" ","").replaceAll("\\s\\S*","");
		//處理之后轉(zhuǎn)換成字符數(shù)組
		char[] ch = temp.trim().toCharArray();
		for (int i = 0; i < ch.length; i++) {
			char c = ch[i];
			//判斷是否是數(shù)字或者英文字符
			if (!judge(c)) {
				//判斷是否是中日韓文
				if (!isChinese(c)) {
					//如果不是數(shù)字或者英文字符也不是中日韓文則表示是亂碼返回true
					//System.out.println(c);
					count++;
				}
			}
		}
		float rate = count/ch.length;
		if(rate>0.4){
			return true;
		}
		//表示不是亂碼 返回false
		return false;
	}
	public static boolean judge(char c){
		if((c >='0' && c<='9')||(c >='a' && c<='z' ||  c >='A' && c<='Z')){
			return true;
		}
		return false;
	}
    /**
     * 判斷是否是中日韓文字
     * @param c     要判斷的字符
     * @return      true或false
     */
    private static boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
            return true;
        }
        return false;
    }

3.java如何判斷字符串是否有亂碼

要判斷字符串是否有亂碼,我們可以依據(jù)以下幾個步驟:

  • 指定編碼:確定我們期望使用的字符編碼( UTF-8、GBK等等)。
  • 驗證編碼:嘗試將字符串編碼為字節(jié)數(shù)組,然后再以相同編碼解碼回來,最后檢查解碼后的結(jié)果是否與原始字符串一致。
  • 檢測非法字符:對字符串進行逐字符檢查,判斷是否存在未能正確解碼的字符。
  • 返回結(jié)果:根據(jù)上述判斷結(jié)果輸出是否存在亂碼。

代碼示例

import java.nio.charset.Charset;
public class StringValidator {
    /**
     * 根據(jù)指定編碼判斷字符串是否有亂碼
     *
     * @param str    待檢測的字符串
     * @param charsetName 指定的字符編碼
     * @return       如果字符串有亂碼返回true,反之返回false
     */
    public static boolean hasGarbage(String str, String charsetName) {
        if (str == null || charsetName == null) {
            return false; // null 時不判斷
        }
        Charset charset = Charset.forName(charsetName);
        try {
            // 將字符串編碼為字節(jié)數(shù)組
            byte[] bytes = str.getBytes(charset);
            // 用相同的編碼解碼
            String decodedStr = new String(bytes, charset);
            // 判斷原字符串和解碼后的字符串是否一致
            return !str.equals(decodedStr);
        } catch (Exception e) {
            e.printStackTrace();  // 輸出異常信息
            return true; // 捕獲異常時認(rèn)為有亂碼
        }
    }
    public static void main(String[] args) {
        String testStr = "測試字符串"; // 需要測試的字符串
        String charset = "UTF-8"; // 可選的編碼格式
        boolean result = hasGarbage(testStr, charset);
        if (result) {
            System.out.println("字符串存在亂碼");
        } else {
            System.out.println("字符串無亂碼");
        }
    }
}

代碼解析

  • hasGarbage方法:此方法負(fù)責(zé)判斷輸入的字符串是否有亂碼。首先,輸入?yún)?shù)為待驗證的字符串和字符編碼。
  • 編碼與解碼:使用getBytes方法將字符串轉(zhuǎn)換為字節(jié)數(shù)組,再用new String構(gòu)造函數(shù)基于相同字符集進行解碼。
  • 比較原字符串與解碼字符串:若兩者不相等,則表示存在亂碼。
  • 異常處理:在處理時對可能出現(xiàn)的異常進行捕獲,并返回有亂碼的結(jié)果。

到此這篇關(guān)于java代碼實現(xiàn)判斷字符串是否為亂碼的文章就介紹到這了,更多相關(guān)java字符串判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java日常練習(xí)題,每天進步一點點(47)

    Java日常練習(xí)題,每天進步一點點(47)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • 在Java和PostgreSQL枚舉之間轉(zhuǎn)換的通用方法

    在Java和PostgreSQL枚舉之間轉(zhuǎn)換的通用方法

    枚舉類型(enum)是一種方便的數(shù)據(jù)類型,允許我們指定一個常量列表,對象字段或數(shù)據(jù)庫列可以設(shè)置為該列表中的值,在本文中,我將回顧處理Java和PostgreSQL枚舉轉(zhuǎn)換的通用方法,需要的朋友可以參考下
    2023-10-10
  • MybatisPlus使用idworker解決雪花算法重復(fù)

    MybatisPlus使用idworker解決雪花算法重復(fù)

    本文主要介紹了MybatisPlus使用idworker解決雪花算法重復(fù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Spring Boot中使用Actuator的/info端點輸出Git版本信息

    Spring Boot中使用Actuator的/info端點輸出Git版本信息

    這篇文章主要介紹了Spring Boot中使用Actuator的/info端點輸出Git版本信息,需要的朋友可以參考下
    2017-06-06
  • 學(xué)習(xí)Java內(nèi)存模型JMM心得

    學(xué)習(xí)Java內(nèi)存模型JMM心得

    這篇文章主要介紹了學(xué)習(xí)Java內(nèi)存模型JMM的心得以及對其原理做了深入的介紹,有興趣的朋友學(xué)習(xí)下吧。
    2017-12-12
  • javaweb項目入門實戰(zhàn)詳細(xì)指南

    javaweb項目入門實戰(zhàn)詳細(xì)指南

    Java?Web開發(fā)是指使用Java技術(shù)來創(chuàng)建動態(tài)網(wǎng)站或Web應(yīng)用程序,Java?Web開發(fā)主要使用Servlet、JSP(JavaServer?Pages)、JavaBeans等技術(shù)來實現(xiàn)動態(tài)頁面和處理業(yè)務(wù)邏輯,這篇文章主要介紹了javaweb項目入門的相關(guān)資料,需要的朋友可以參考下
    2025-12-12
  • Spring Boot管理用戶數(shù)據(jù)的操作步驟

    Spring Boot管理用戶數(shù)據(jù)的操作步驟

    SpringBoot結(jié)合Thymeleaf模板引擎,可以快速搭建Web應(yīng)用,介紹了使用SpringBoot處理JSON數(shù)據(jù)的基本過程,包括創(chuàng)建實體類、視圖頁面和控制器,通過這些步驟,即可完成基于SpringBoot和Thymeleaf的簡單Web開發(fā),感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • SpringBoot中使用Knife4J的解決方案

    SpringBoot中使用Knife4J的解決方案

    knife4j是為Java?MVC框架集成Swagger生成Api文檔的增強解決方案,這篇文章主要介紹了SpringBoot中使用Knife4J,需要的朋友可以參考下
    2022-10-10
  • java中實現(xiàn)分頁的幾種常見方式總結(jié)

    java中實現(xiàn)分頁的幾種常見方式總結(jié)

    在項目中經(jīng)常會查詢大量數(shù)據(jù),這就要用到分頁展示,下面這篇文章主要給大家介紹了關(guān)于java中實現(xiàn)分頁的幾種常見方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • spring boot使用sharding jdbc的配置方式

    spring boot使用sharding jdbc的配置方式

    這篇文章主要介紹了spring boot使用sharding jdbc的配置方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

镇康县| 玉林市| 工布江达县| 札达县| 邵武市| 诸暨市| 高州市| 洞口县| 龙州县| 竹山县| 内乡县| 即墨市| 浦江县| 丹阳市| 突泉县| 新营市| 海淀区| 白水县| 黄平县| 莱西市| 长白| 垣曲县| 米林县| 商城县| 乌兰察布市| 文山县| 利辛县| 博乐市| 凤凰县| 通化县| 富顺县| 四子王旗| 太保市| 上林县| 庆元县| 阿勒泰市| 高淳县| 石渠县| 固安县| 綦江县| 买车|