Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เมธอด String.IsNormalized() ใน C# พร้อมตัวอย่าง


เมธอด String.IsNormalized() ใน C# ใช้สำหรับตรวจสอบว่าสตริงอยู่ในรูปแบบมาตรฐาน Unicode (Unicode normalization form) ที่ระบุหรือไม่ คืนค่า true หากอยู่ในรูปแบบนั้น มิฉะนั้น false

ไวยากรณ์ (Syntax)

public bool IsNormalized ();
public bool IsNormalized (System.Text.NormalizationForm normalizationForm);
  • normalizationForm — รูปแบบการมาตรฐาน Unicode (FormC, FormD, FormKC, FormKD)

รูปแบบการมาตรฐาน Unicode (Normalization Forms)

รูปแบบชื่อเต็มคำอธิบาย
FormCNormalization Form C (NFC)Canonical Composition — รวมตัวอักษรประกอบ (composed)
FormDNormalization Form D (NFD)Canonical Decomposition — แยกตัวอักษรประกอบ (decomposed)
FormKCNormalization Form KC (NFKC)Compatibility Composition — รวม + แทนที่ตัวอักษรที่เข้ากันได้
FormKDNormalization Form KD (NFKD)Compatibility Decomposition — แยก + แทนที่ตัวอักษรที่เข้ากันได้

ตัวอย่างที่ 1: ตรวจสอบรูปแบบมาตรฐานเริ่มต้น (FormC)

using System;

public class Demo
{
    public static void Main(String[] args)
    {
        string str1 = "Ryan";
        string str2 = "Matt";

        Console.WriteLine("String 1 = " + str1);
        Console.WriteLine("HashCode of String 1 = " + str1.GetHashCode());
        Console.WriteLine("Index of 'k' in str1 = " + str1.IndexOf("k"));

        Console.WriteLine("\nString 2 = " + str2);
        Console.WriteLine("HashCode of String 2 = " + str2.GetHashCode());
        Console.WriteLine("Index of 'k' in str2 = " + str2.IndexOf("k"));

        bool res1 = str1.IsNormalized();
        Console.WriteLine("\nThe str1 is in normalized form = " + res1);

        bool res2 = str2.IsNormalized();
        Console.WriteLine("The str2 is in normalized form = " + res2);
    }
}

ผลลัพธ์

String 1 = Ryan
HashCode of String 1 = 1580592915
Index of 'k' in str1 = -1

String 2 = Matt
HashCode of String 2 = -1920007383
Index of 'k' in str2 = -1

The str1 is in normalized form = True
The str2 is in normalized form = True

ตัวอย่างที่ 2: ตรวจสอบรูปแบบต่างๆ (FormC, FormD, FormKC)

using System;
using System.Text;

public class Demo
{
    public static void Main(String[] args)
    {
        string str1 = "Imagine Dragons";
        string str2 = "Imagine";

        Console.WriteLine("String 1 = " + str1);
        Console.WriteLine("HashCode of String 1 = " + str1.GetHashCode());
        Console.WriteLine("String 2 = " + str2);
        Console.WriteLine("HashCode of String 2 = " + str2.GetHashCode());
        Console.WriteLine("String 1 is equal to String 2: " + str1.Equals(str2));

        Console.WriteLine("str1 is normalized to FormC? = " + str1.IsNormalized(NormalizationForm.FormC));
        Console.WriteLine("str2 is normalized to FormC? = " + str2.IsNormalized(NormalizationForm.FormC));
        Console.WriteLine("str1 is normalized to FormD? = " + str1.IsNormalized(NormalizationForm.FormD));
        Console.WriteLine("str2 is normalized to FormD? = " + str2.IsNormalized(NormalizationForm.FormD));
        Console.WriteLine("str1 is normalized to FormKC? = " + str1.IsNormalized(NormalizationForm.FormKC));
        Console.WriteLine("str2 is normalized to FormKC? = " + str2.IsNormalized(NormalizationForm.FormKC));
        Console.WriteLine("str1 is normalized to FormKD? = " + str1.IsNormalized(NormalizationForm.FormKD));
        Console.WriteLine("str2 is normalized to FormKD? = " + str2.IsNormalized(NormalizationForm.FormKD));
    }
}

ผลลัพธ์

String 1 = Imagine Dragons
HashCode of String 1 = -1546868095
String 2 = Imagine
HashCode of String 2 = -1414695254
String 1 is equal to String 2: False
str1 is normalized to FormC? = True
str2 is normalized to FormC? = True
str1 is normalized to FormD? = True
str2 is normalized to FormD? = True
str1 is normalized to FormKC? = True
str2 is normalized to FormKC? = True
str1 is normalized to FormKD? = True
str2 is normalized to FormKD? = True

ข้อสังเกตสำคัญ

  • สตริง ASCII/อังกฤษทั่วไปมักอยู่ในรูปแบบมาตรฐานทุกรูปแบบแล้ว (True ทุก Form)
  • สตริงที่มีตัวอักษรประกอบ (เช่น é = e + ́) อาจไม่ได้อยู่ใน FormC แต่อยู่ใน FormD
  • ใช้ str.Normalize(form) เพื่อแปลงสตริงให้อยู่ในรูปแบบที่ต้องการ
  • สำคัญสำหรับการเปรียบเทียบสตริง ข้ามภาษา การจัดเก็บฐานข้อมูล และความปลอดภัย (security)
  • เมธอด overload ไม่มีพารามิเตอร์ จะตรวจสอบ FormC (ค่าเริ่มต้น)