Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

बाइट लंबाई के आधार पर UTF8 स्ट्रिंग को छोटा करने का सबसे अच्छा तरीका

यहां दो संभावित समाधान दिए गए हैं - एक LINQ वन-लाइनर इनपुट को बाएं से दाएं संसाधित करता है और एक पारंपरिक for -लूप इनपुट को दाएं से बाएं प्रोसेस करता है। कौन सी प्रसंस्करण दिशा तेज है यह स्ट्रिंग की लंबाई, अनुमत बाइट लंबाई और मल्टीबाइट वर्णों की संख्या और वितरण पर निर्भर करता है और एक सामान्य सुझाव देना कठिन है। LINQ और पारंपरिक कोड I के बीच निर्णय शायद स्वाद (या शायद गति) का मामला है।

यदि गति मायने रखती है, तो प्रत्येक पुनरावृत्ति में पूरे स्ट्रिंग की बाइट लंबाई की गणना करने के बजाय अधिकतम लंबाई तक पहुंचने तक प्रत्येक वर्ण की बाइट लंबाई जमा करने के बारे में सोच सकता है। लेकिन मुझे यकीन नहीं है कि यह काम करेगा क्योंकि मुझे यूटीएफ -8 एन्कोडिंग अच्छी तरह से नहीं पता है। मैं सैद्धांतिक रूप से कल्पना कर सकता था कि एक स्ट्रिंग की बाइट लंबाई सभी वर्णों की बाइट लंबाई के योग के बराबर नहीं होती है।

public static String LimitByteLength(String input, Int32 maxLength)
{
    return new String(input
        .TakeWhile((c, i) =>
            Encoding.UTF8.GetByteCount(input.Substring(0, i + 1)) <= maxLength)
        .ToArray());
}

public static String LimitByteLength2(String input, Int32 maxLength)
{
    for (Int32 i = input.Length - 1; i >= 0; i--)
    {
        if (Encoding.UTF8.GetByteCount(input.Substring(0, i + 1)) <= maxLength)
        {
            return input.Substring(0, i + 1);
        }
    }

    return String.Empty;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. oracle में अनुक्रम के साथ तालिका बनाएं

  2. Oracle स्ट्रिंग फ़ंक्शंस (पूरी सूची)

  3. Oracle इंस्टेंट क्लाइंट स्थापित करना

  4. समवर्ती प्रबंधक में अनुरोध सेट

  5. Oracle 12c में PBKDF2 का उपयोग कैसे करें?