Oracle
 sql >> база данни >  >> RDS >> Oracle

Най-добрият начин да съкратите UTF8 низ въз основа на дължината на байта

Ето две възможни решения - LINQ едноредова обработка на входа отляво надясно и традиционен for -циклична обработка на входа от дясно на ляво. Коя посока на обработка е по-бърза зависи от дължината на низа, разрешената дължина на байт и броя и разпределението на многобайтовите знаци и е трудно да се даде общо предложение. Решението между LINQ и традиционния код вероятно е въпрос на вкус (или може би скорост).

Ако скоростта има значение, може да се помисли просто за натрупване на дължината на байта на всеки знак, докато се достигне максималната дължина, вместо да се изчислява дължината на байта на целия низ във всяка итерация. Но не съм сигурен дали това ще работи, защото не познавам UTF-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. Приемливи ли са кръговите препратки в базата данни?

  2. Изпълнете SQL от пакетен файл

  3. java.security.AccessControlException:достъпът е отказан (java.security.SecurityPermission authProvider.SunMSCAPI)

  4. Oracle:SQL заявка за намиране на всички тригери, принадлежащи към таблиците?

  5. Как Java за OS X 2013-004 засяга (прекъсва) Swing приложения?