Сравнение строки с пустой строкой (Java)


Я не совсем понимаю ваш вопрос, пожалуйста, опишите его подробнее, но я предлагаю вам добавить <form action="post.php?id=x"> и </form>
Таким образом, ваша HTML-разметка (может быть .php) должно выглядеть так:

<form method="POST" acion="post.php?id=x"/> <!-- here you can echo ID from session -->
<input type="text" id="name" class="search" autocomplete="off" data-provide="typeahead" placeholder="search" />
<input type="submit" value="Search!" />
</form>


Кстати, если вы не хотите заменять post.php?id=x реальным идентификатором, например, post.php?id=84, вы можете заменить x в вашем <form> на [117 ]
Конечно, вы должны добавить PHP, определяющий $ id, но, как я уже сказал, я не понимаю весь ваш вопрос, опишите его подробнее, чтобы мы могли вам помочь.
Надеюсь, это поможет: :)
Спасибо,
Оливер

32
задан ROMANIA_engineer 21 December 2015 в 07:46
поделиться

6 ответов

Это является немного поперечным от Вашего исходного вопроса, но всегда существует

if(s1.length() == 0)

, я полагаю, что это эквивалентно isEmpty () метод от 1,6.

10
ответ дан 27 November 2019 в 19:42
поделиться

Это собирается зависеть от того, если строка является литералом или нет. При создании строки с

new String("")

Затем, она никогда не будет соответствовать "", равняется оператору, как показано ниже:

    String one = "";
    String two = new String("");
    System.out.println("one == \"\": " + (one == ""));
    System.out.println("one.equals(\"\"): " + one.equals(""));
    System.out.println("two == \"\": " + (two == ""));
    System.out.println("two.equals(\"\"): " + two.equals(""));

-

one == "": true
one.equals(""): true
two == "": false
two.equals(""): true

В основном, Вы хотите всегда использовать, равняется ()

26
ответ дан 27 November 2019 в 19:42
поделиться
"".equals(s)

, Кажется, наилучший вариант, но существует также Stringutils.isEmpty(s) содержавшееся в свободном городском населении Apache библиотека Ленга

9
ответ дан 27 November 2019 в 19:42
поделиться
s1 == ""

не надежно, поскольку это тестирует ссылочное равенство не объектное равенство (и Строка не является строго канонической).

s1.equals("")

лучше, но может пострадать от исключений нулевого указателя. Еще лучше:

"".equals(s1)

Никакие исключения нулевого указателя.

РЕДАКТИРОВАНИЕ: хорошо, точку спросили приблизительно [1 110] каноническая форма . Эта статья определяет его как:

предположим у нас есть некоторый набор S объектов с отношением эквивалентности. Каноническая форма дана путем обозначения некоторых объектов S быть "в канонической форме", такова, что каждый объект на рассмотрении эквивалентен точно одному объекту в канонической форме.

, Чтобы дать Вам практический пример: возьмите набор рациональных чисел (или "части", их обычно называют). Рациональное число состоит из числителя и denomoinator (делитель), оба из которых являются целыми числами. Эти рациональные числа эквивалентны:

3/2, 6/4, 24/16

Рациональные nubmers обычно пишутся таким образом, что GCD (наибольший общий делитель) равняется 1. Таким образом, все они будут упрощены до 3/2. 3/2 может быть просмотрен как каноническая форма из этого набора рациональных чисел.

Так что означает в программировании, когда термин "каноническая форма" используется? Это может означать несколько вещей. Посещайте, например, этот мнимый урок:

public class MyInt {
  private final int number;

  public MyInt(int number) { this.number = number; }
  public int hashCode() { return number; }
}

хэш-код класса MyInt является канонической формой того класса, потому что для набора всех экземпляров MyInt, можно взять любые два элемента m1 и m2, и они повинуются следующему отношению:

m1.equals(m2) == (m1.hashCode() == m2.hashCode())

, Что отношение является сущностью канонической формы. Более распространенным способом это неожиданно возникает, когда Вы используете методы фабрики для классов, таких как:

public class MyClass {
  private MyClass() { }

  public MyClass getInstance(...) { ... }
}

Экземпляры нельзя непосредственно инстанцировать, потому что конструктор является частным. Это - просто метод фабрики. Какой метод фабрики позволяет, Вы, чтобы сделать являетесь вещами как:

  • Всегда возвращают тот же экземпляр (абстрагированный одиночный элемент);
  • Просто создают новый intsance с каждым вызовом;
  • Эхо-сигналы в [1 138] каноническая форма (больше на этом за секунду); или
  • независимо от того, что Вам нравится.

В основном создание объекта кратких обзоров метода фабрики и лично я думаю, что это была бы интересная функция языка, чтобы вынудить всех конструкторов быть частными для осуществления использования этого шаблона, но я отступаю.

то, Что можно сделать с этим методом фабрики, является кэшем экземпляры, которые Вы создаете таким образом, что для любых двух экземпляров s1 и s2 они повинуются следующему тесту:

(s1 == s2) == s1.equals(s2)

Поэтому, когда я говорю, что Строка не является строго канонической, это означает что:

String s1 = "blah";
String s2 = "blah";
System.out.println(s1 == s2); // true

, Но поскольку другие указали, что можно изменить это при помощи:

String s3 = new String("blah");

и возможно:

String s4 = String.intern("blah");

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

Как протест к вышеупомянутому шаблону, я должен указать, что управление созданием объекта с частными конструкторами и методами фабрики не гарантирует ссылочного равенства объекта средств равенства из-за сериализации. Сериализация обходит механизм создания обычного объекта. Josh Bloch затрагивает эту тему в Эффективном Java (первоначально в первом выпуске, когда он говорил о безопасном с точки зрения типов перечислимом шаблоне, который позже стал функцией языка в Java 5), и можно обойти его путем перегрузки (частного) readResolve () метод. Но это хитро. Загрузчики класса будут влиять на проблему также.

Так или иначе, это - каноническая форма.

68
ответ дан 27 November 2019 в 19:42
поделиться

Строка, строка, строка, является ли это пустой строкой или нет. Используйте equals().

6
ответ дан 27 November 2019 в 19:42
поделиться

Учитывая две строки:

String s1 = "abc";
String s2 = "abc";

- или -

String s1 = new String("abc");
String s2 = new String("abc");

== оператор, выполненный на двух Объектах, проверяет на объектные идентификационные данные (это возвращает true, если эти два оператора возвращаются к тому же экземпляру объекта.) Фактическое поведение == относилось к java.lang. Строки, не всегда кажется, последовательны из-за Строкового интернирования.

В Java, Строки , интернировал (по крайней мере частично на усмотрение JVM.) В любом моменте времени s1 и s2 может или не мог быть интернирован, чтобы быть той же ссылкой на объект (предположение, что у них есть то же значение.) Таким образом s1 == s2 может или может не возвратить true, базирующийся только на том, были ли s1 и s2 оба интернированы.

Создание s1 и s2, равный пустым строкам, не имеет никакого эффекта на это - они все еще могут или не могли быть интернированы.

Короче говоря, == может или может не возвратить true, если s1 и s2 имеют то же содержание. s1.equals (s2), как гарантируют, возвратит true, если s1 и s2 будут иметь то же содержание.

0
ответ дан 27 November 2019 в 19:42
поделиться
Другие вопросы по тегам:

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