Squeak.ru - шаблоны программирования

Почему строка, возвращаемая из HashMap, не совпадает, хотя она идентична System.out?

Дополнение к этим вопросам и ответам.

Цель состоит в том, чтобы сопоставить строку, которая возвращается следующим методом:

public String getAssignment() {
    return (String) hashmap.get("assignment");
}

Попытка

В дальнейшем:

String s = "12345";
System.out.println(s.matches("12345"));

результаты в матче, идея заключалась в том, что:

System.out.println(assignment.getAssignment());
System.out.println(assignment.getAssignment().length());
System.out.println(assignment.getAssignment().matches("11111"));
System.out.println(assignment.getAssignment().equals("11111"));
System.out.println(assignment.getAssignment().trim().length());

также должен вернуть true.

Результат

System.out 11111
System.out 15
System.out false
System.out false
System.out 13
29.10.2014

  • Работает на меня. Не могли бы вы сделать воспроизводимый пример? 30.10.2014
  • @aruisdante Да, 11111 возвращается в соответствии с System.out 30.10.2014
  • Скорее всего, возвращаемое значение assignment.getAssignment() содержит некоторые whitespace, которые не видны в sout, но из-за этого строка не соответствует 11111 без этих пробелов. Используйте отладчик и проверьте возвращаемое значение assignment.getAssignment() или проверьте строку length. 30.10.2014
  • @ user2336315 Должен ли я включать HashMap? 30.10.2014
  • @FabianBarney Я проверю строку. 30.10.2014
  • @FabianBarney System.out.println(assignment.getAssignment().matches("1 1 1 1 1 ")); тоже не работает 30.10.2014
  • @FabianBarney Хорошее предложение. Я проверю длину строки. 30.10.2014
  • @utrecht Урм, я не это имел в виду, когда раньше говорил о пробелах. 30.10.2014
  • Если вы просто хотите проверить, что значение равно некоторой константе, используйте .equals(). .matches() предназначен для сопоставления регулярных выражений, что не нужно для проверки простых строковых литералов. 30.10.2014
  • @utrecht Возможно, вы захотите проверить массив байтов, полученный для строки. Также могут быть непечатаемые символы. 30.10.2014
  • Твой титул бессмыслен. Строка не может соответствовать System.out. 30.10.2014

Ответы:


1

Скорее всего, у вас есть "невидимые" символы (пробелы) после значения - вызовите trim() для значения перед его проверкой.

Кроме того, вашему чеку не нужны регулярные выражения, поэтому просто используйте .equals() вместо .matches().

Попробуй это:

assignment.getAssignment().trim().equals("11111")

Редактировать

Кажется, у вас есть встроенные пробелы — нет проблем. Чтобы удалить все пробелы в любом месте значения, используйте replaceAll() (для замены на основе регулярных выражений):

assignment.getAssignment().replaceAll("\\s", "").equals("11111")
29.10.2014
  • Спасибо, что опубликовали ответ. Длина строки уменьшена с 15 до 13 символов с помощью обрезки. Ожидалось, что trim приведет к 5 символам. Я продолжу отлаживать строку. 30.10.2014
  • @utrecht Если вам нужны советы о том, что могло с ним случиться, вы можете использовать следующее чудовище, чтобы распечатать его в недвусмысленном формате base64, на который каждый может посмотреть, не теряя информации: System.out.println(javax.xml.bind.DatatypeConverter.printBase64Binary(assignment.getAssignment().getBytes(java.nio.charset.Charset.forName("UTF-8")))); 30.10.2014
  • Или что-нибудь попроще, которое даст вам коды символов: for ( char ch : assignment.getAssignment().toCharArray() ) System.out.printf("%x%n",(int)ch); 30.10.2014
  • @RealSkeptic результат: 9 30.10.2014
  • @RealSkeptic Я потерялся. Когда я запускаю код, вывод: 11111, 31, 9, 9, 31, 9, 9, 31, 9, 9, 31, 9, 9, 31, 9, 9 30.10.2014
  • Кажется, у вас есть два символа tab после каждой из ваших 1. Я понятия не имею, почему вывод не показывает их с широкими вкладками, но это определенно 1\t\t1\t\t1\t\t1\t\t1\t\t, а не 11111. 30.10.2014
  • @Bohemian Спасибо. Я попробую это решение сегодня вечером, и я дам вам знать результат. 30.10.2014
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...