เมธอด 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)
| รูปแบบ | ชื่อเต็ม | คำอธิบาย |
|---|---|---|
| FormC | Normalization Form C (NFC) | Canonical Composition — รวมตัวอักษรประกอบ (composed) |
| FormD | Normalization Form D (NFD) | Canonical Decomposition — แยกตัวอักษรประกอบ (decomposed) |
| FormKC | Normalization Form KC (NFKC) | Compatibility Composition — รวม + แทนที่ตัวอักษรที่เข้ากันได้ |
| FormKD | Normalization 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 (ค่าเริ่มต้น)