Проверка строковое содержание? длина строки По сравнению с Пустой строкой

Который более эффективен для компилятора и лучшей практики для проверки, является ли строка пробелом?

  1. Проверка, ли длина строки == 0
  2. Проверка, пуста ли строка (strVar =="")

Кроме того, ответ зависит от языка?

14
задан Lion 22 October 2012 в 00:33
поделиться

12 ответов

Да, это зависит от языка, так как строковое устройство хранения данных отличается между языками.

  • строки типа Паскаля: Length = 0.
  • строки C-стиля: [0] == 0.
  • .NET: .IsNullOrEmpty.

И т.д.

17
ответ дан 1 December 2019 в 06:59
поделиться

Снова, не зная язык, невозможно сказать.

Однако я рекомендую выбрать технику, которая имеет большую часть смысла программисту обслуживания, который следует и должен будет поддержать работу.

я рекомендовал бы писать функцию, которая явно делает то, что Вы хотите, такой как

#define IS_EMPTY(s) ((s)[0]==0)

или сопоставимый. Теперь нет сомнения, что в, Вы проверяете.

0
ответ дан 1 December 2019 в 06:59
поделиться

Для струн до,

if (s[0] == 0)

будет быстрее или, чем

if (strlen(s) == 0)

или, чем

if (strcmp(s, "") == 0)

, потому что Вы избежите издержек вызова функции.

0
ответ дан 1 December 2019 в 06:59
поделиться

@Nathan

На самом деле, может быть лучше проверить, ли первый символ в строке '\0':

я почти упомянул, что, но закончил тем, что пропустил его, начиная с вызова strcmp() с пустой строкой и непосредственно проверкой, что первый символ в строке оба O (1). Вы в основном просто платите за дополнительный вызов функции, который является довольно дешевым. Если Вам действительно нужна абсолютная лучшая скорость, тем не менее, определенно идут с прямым first-char-to-0 сравнением.

Честно, я всегда использую strlen() == 0, потому что я имею никогда записанный программа, где это было на самом деле измеримой проблемой производительности, и я думаю, что это - самый читаемый способ выразить проверку.

0
ответ дан 1 December 2019 в 06:59
поделиться

В этом случае, непосредственно проверяя длину быстрее, потому что она избегает издержек построения новой пустой строки.

@DerekPark: это не всегда верно. "" строковый литерал так, в Java, он будет почти наверняка уже интернирован.

0
ответ дан 1 December 2019 в 06:59
поделиться

На самом деле IMO лучший способ определить является IsNullOrEmpty () метод строкового класса.

http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.

Обновление: Я принял .NET на других языках, это могло бы отличаться.

0
ответ дан 1 December 2019 в 06:59
поделиться

На языках, которые используют C-стиль (завершенные пустым указателем) строки, по сравнению с "" будут быстрее

На самом деле, может быть лучше проверить, ли первый символ в строке '\0':

char *mystring;
/* do something with the string */
if ((mystring != NULL) && (mystring[0] == '\0')) {
    /* the string is empty */
}

В Perl существует третья опция, что строка не определена. Это несколько отличается от Нулевого указателя в C, если только потому, что Вы не получаете отказ сегментации для доступа к неопределенной строке.

2
ответ дан 1 December 2019 в 06:59
поделиться

В Java 1.6 Строковый класс имеет новый метод isEmpty

, Там также Джакартская библиотека свободного городского населения, которая имеет метод isBlank . Пробел определяется как строка, которая содержит только пробел.

1
ответ дан 1 December 2019 в 06:59
поделиться

В .NET:

string.IsNullOrEmpty( nystr );

строки могут быть пустыми, таким образом.Length иногда бросает NullReferenceException

2
ответ дан 1 December 2019 в 06:59
поделиться

На языках, которые используют C-стиль (завершенные пустым указателем) строки, по сравнению с "" будут быстрее. Это - O (1) операция, в то время как взятие длины строки C-стиля является O (n).

На языках, которые хранят длину как часть строкового объекта (C#, Java...) проверка длины также O (1). В этом случае непосредственно проверка длины быстрее, потому что она избегает издержек построения новой пустой строки.

14
ответ дан 1 December 2019 в 06:59
поделиться

String.IsNullOrEmpty() только работы над .net 2.0 и выше, для .net 1/1.1, я склонен использовать:

if (inputString == null || inputString == String.Empty)
{
    // String is null or empty, do something clever here. Or just expload.
}

я использую Строку. Пустой в противоположность, "" потому что "" создаст объект, тогда как Строка. Пустая привычка - я знаю что-то маленькое и тривиальное, но идентификатор все еще скорее не создает объекты, когда мне не нужны они! ( Источник )

2
ответ дан 1 December 2019 в 06:59
поделиться

Предполагая, что ваш вопрос относится к .NET:

Если вы хотите проверить вашу строку на нулевость, используйте IsNullOrEmpty, если вы уже знаете, что ваша строка не является нулевой, например, при проверке TextBox.Text и т.д., не используйте IsNullOrEmpty, и тогда приходит ваш вопрос.
Так что, на мой взгляд, String.Length менее производителен, чем сравнение строк.

Я протестировал это (я также тестировал на C#, тот же результат):

Module Module1
  Sub Main()
    Dim myString = ""


    Dim a, b, c, d As Long

    Console.WriteLine("Way 1...")

    a = Now.Ticks
    For index = 0 To 10000000
      Dim isEmpty = myString = ""
    Next
    b = Now.Ticks

    Console.WriteLine("Way 2...")

    c = Now.Ticks
    For index = 0 To 10000000
      Dim isEmpty = myString.Length = 0
    Next
    d = Now.Ticks

    Dim way1 = b - a, way2 = d - c

    Console.WriteLine("way 1 took {0} ticks", way1)
    Console.WriteLine("way 2 took {0} ticks", way2)
    Console.WriteLine("way 1 took {0} ticks more than way 2", way1 - way2)
    Console.Read()
  End Sub
End Module

Результат:

Way 1...
Way 2...
way 1 took 624001 ticks
way 2 took 468001 ticks
way 1 took 156000 ticks more than way 2

Что означает, что сравнение занимает намного больше времени, чем проверка длины строки.

1
ответ дан 1 December 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: