2016-01-26 2 views
-2

У меня относительно простой вывод консоли для отладки, поскольку я пытаюсь выяснить ошибку, не связанную с этой проблемой. Мой код выглядит следующим образом:System.out.println() пропущенные значения/вывод неполных

System.out.println("info: " + element + " || " + getIDforName(element)); 

Переменная element типа String, берется из вывода CMD и может мне пустой/пустой. Поэтому я ожидаю, что он выведет что-то вроде info: null || null. Однако он этого не делает, но выводит это: || null, что действительно озадачивает меня. Я бы не понял, если он не напишет полностью по какой-либо причине или напишет info: ||, но фактический вывод не имеет для меня никакого смысла, поскольку он не может просто пропустить часть.

Итак, мой вопрос: почему это происходит и как его исправить? Если какой-либо дополнительный код необходим, я постараюсь его предоставить.

EDIT: getIDforName (String name) - это метод, который сравнивает некоторые строки и возвращает строку, если имеется соответствующая.

+1

Что такое 'element' и дать код для' getIDforName (element) '! –

+0

Вы должны проверить элемент перед println -> посмотреть, имеет ли он значение, равно null и т. Д., И сделать вывод. В противном случае, когда он не пуст, null, отобразите другую информацию. Basic, если еще ... вы пробовали с другим разделителем, кроме || ? – user3344236

+1

Может ли быть, что 'element' строит что-то, что включает в себя новые строки? Есть ли информация: 'на предыдущей строке? – Biffen

ответ

1

я проверил как содержание element во время выполнения, используя отладчик, который дал мне значение null и напечатал значения byteArray, как указал Том, который вернул правильное значение, как и следовало ожидать (байты строки, например [76, 111, 103, 111, 110] для ввода Logon.

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

UPDATE:

Причина, почему я имел этот вопрос был в следующем: Начальное значение Ф.О. переменной пришли из ЦМД Windows, и, следовательно, был отделен \r\n, но я только разделить его на \n так далее последняя Элемент JList только что вернул строку, написанную beore, она написала \r на консоль. Использование System.lineSeparator() для расщепления разрешило проблему по причине вместо использования trim() для лечения симптомов. Большое спасибо Тому за это.

+1

Ну, я бы не остановился здесь. У вас есть проблема где-то в вашем коде, поэтому 'element' получает неожиданное значение. Поэтому вы должны попытаться найти источник проблемы, вместо того чтобы скрывать проблему, используя 'trim()'. Но это зависит от вас, что вы хотите сделать. – Tom

+0

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

+1

Вот почему я попросил mcve: P. – Tom

0

Простой способ переопределить метод toString() в вашем классе элемента.

Проверить эту тему:

+0

Элемент уже является строкой. мой вопрос не касается значения 'element', но почему' 'info:" 'не выдается консолью. – Niklas

+0

О, я вижу, не понял. Я попробовал свой код в тесте java и, похоже, работает хорошо. Результат правильный, не могли бы вы дать нам больше информации? – kunpapa

0

Самый простой, что вы можете сделать, это проверить содержание element первого, например, проверьте, действительно ли это значение null. Скорее всего, это не так. Например.

System.out.println("info: " + "\b\b\b\b\b\b" + " || " + null); 

может производить

|| null

, так что я подозреваю, element содержать "\b\b\b\b\b\b" или любые другие управляющие символы, как и другие предложили.

+0

Возможно, вы захотите написать «may производит» вместо «производит», потому что зависит от консоли, как она обрабатывает управляющие символы. Например, консоль IDEA просто игнорирует их. – Tom

+0

Я могу добавить Я использую консоль IDEA. IntelliJ IDEA CE, а именно – Niklas

+1

@Niklas Ваша проблема возникает со следующим кодом: 'System.out.println (" info: "+" \ r "+" || "+ null);'. Итак, как обсуждалось в комментариях к вашему вопросу, проверьте, что String не содержит '\ r' и попытайтесь создать [mcve]. – Tom

0

Возможно, это связано с тем, что пустая строка «" не является нулевой.

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

System.out.println("info: " + (element.length() == 0 ? null : element) + " || " + element); 

Проверить нулевой перед передачей элемента в System.out

+0

Итак, пустой пуст 'element' String является причиной для *" info : «* Отсутствует на выходе (согласно OP)? – Tom

+0

Вы получите 'NullPointerException', если вы попробуете этот код с' element' равным 'null'. – charlie

+0

Согласно OP Это, вероятно, ошибка. Попытка распечатать что-то внутри элемента может изменить что-то! здесь ничего предсказуемого –

Смежные вопросы