Подтвердить что ты не робот

Почему строки начинаются с "" на Java?

Возможный дубликат:
Почему "abcd" .StartsWith( "" ) возвращает true?

Во время отладки через некоторый код я нашел, что определенная часть моей проверки использовала метод .startsWith() в классе String, чтобы проверить, запущена ли строка с пустым символом

Учитывая следующее:

public static void main(String args[])
{

    String s = "Hello";
    if (s.startsWith(""))
    {
        System.out.println("It does");
    }

}

Он выводит It does

Мой вопрос в том, почему строки начинаются с пустого символа? Я предполагаю, что под капотом Строки суть массивы символов, но в этом случае я думал, что первый символ будет H

Может кто-нибудь объяснить пожалуйста?

4b9b3361

Ответ 1

"- это пустая строка, не содержащая символов. Нет" пустого символа", если вы не имеете в виду пробел или нулевой символ, ни один из которых не является пустым.

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

1 = ...00001
"foo" = ... + "" + "" + "" + "foo"

Строки также заканчиваются бесконечным количеством пустых строк (как и десятичные числа с нулями):

1 = 001.000000...
"foo" = "foo" + "" + "" + "" + ...

Ответ 2

Похоже, в вашем коде есть недоразумение. Ваше утверждение s.startsWith("") проверяет, начинается ли строка с пустой строки (и not пустой символ). Это может быть странный выбор реализации, так или иначе: все строки скажут, что вы начинаете с пустой строки.

Также обратите внимание, что пустой символ будет строкой " ", в отличие от пустой строки "".

Ответ 3

"Привет" начинается с ", и он также начинается с" H ", и он также начинается с" He ", и он также отображает" Hel"... вы видите?

Ответ 4

То, что "" не является пустой, является пустой строкой. Я предполагаю, что API задает вопрос, является ли это подстрокой этого. И пустая строка нулевой длины является подстрокой всего.

Ответ 5

Пустая строка ("") в основном "удовлетворяет" каждой строке. В вашем примере java вызывает

s.startsWith(""); 

к

s.startsWith("", 0);

который по существу следует принципу, что "пустой элемент (строка) удовлетворяет его ограничению (ваше строковое предложение)".

Из String.java

/**
     * Tests if the substring of this string beginning at the
     * specified index starts with the specified prefix.
     *
     * @param   prefix    the prefix.
     * @param   toffset   where to begin looking in this string.
     * @return  <code>true</code> if the character sequence represented by the
     *          argument is a prefix of the substring of this object starting
     *          at index <code>toffset</code>; <code>false</code> otherwise.
     *          The result is <code>false</code> if <code>toffset</code> is
     *          negative or greater than the length of this
     *          <code>String</code> object; otherwise the result is the same
     *          as the result of the expression
     *          <pre>
     *          this.substring(toffset).startsWith(prefix)
     *          </pre>
     */
    public boolean startsWith(String prefix, int toffset) {
    char ta[] = value;
    int to = offset + toffset;
    char pa[] = prefix.value;
    int po = prefix.offset;
    int pc = prefix.count;
    // Note: toffset might be near -1>>>1.
    if ((toffset < 0) || (toffset > count - pc)) {
        return false;
    }
    while (--pc >= 0) {
        if (ta[to++] != pa[po++]) {
            return false;
        }
    }
    return true;
    } 

Ответ 6

Для людей, которые взяли теорию автоматов, это имеет смысл, потому что пустая строка ε является подстрокой любой строки, а также является элементом идентификации конкатенации, то есть:

for all strings x, ε + x = x, and x + ε = x

Итак, да, каждая строка "startWith" пустая строка. Также обратите внимание (как говорили многие другие), пустая строка отличается от пустого или нулевого символа.

Ответ 7

Пусто ( "), отличная от пустой строки (" "). Пустое пространство - символ, пустая строка - отсутствие какого-либо символа.

Ответ 8

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