Возникла проблема при попытке распечатать элементы массива int примитивного типа на консоли с помощью метода Stream API forEach с использованием метода System.out.print, поскольку к выводу консоли добавляется дополнительный знак %.
Пожалуйста, найдите ниже мой основной метод -
public static void main(String[] args) {
int[] A = {1, 2, 3, 4, 5, 6, 7, 8};
Arrays.stream(A).forEach(s -> System.out.print(s));
}
Выход - 12345678%
Ожидаемый результат - 12345678
Мне было интересно, почему в конце печати массива добавляется дополнительный знак %. Я использую МакОС. Пробовал как с VSCode, так и с командами терминала javac и java, обе выдавали одну и ту же проблему.
Примечание. System.out.println работает нормально без добавления знака %.
Связанное сообщение (без удовлетворительного ответа): Удалить знак процента после System.out.print();
ОБНОВЛЕНИЕ: Оказалось, что это проблема с zsh. Мне удалось проследить за ответом на сообщение StackExchange и добавить PROMPT_EOL_MARK='' в свой файл ~/.zshrc, чтобы удалить знак %.




Вот как ведет себя zsh, когда в конце вывода нет символа новой строки. Вы используете print, который, в отличие от println, не печатает конечную новую строку. См. также этот пост на Unix & Linux Stack Exchange.
Вы увидите то же самое поведение с echo -n (echo, но без завершающей новой строки):
sweeper@sweepers-MacBook-Pro ~ % echo -n Foo
Foo%
sweeper@sweepers-MacBook-Pro ~ %
Если вы используете bash, % не будет, но обратите внимание, что из-за отсутствия новой строки следующее приглашение остается в той же строке, что и вывод.
bash-3.2$ echo -n Foo
Foobash-3.2$
Вы можете просто поставить еще один System.out.println() после своего кода, и на zsh % не будет.
Отличное объяснение. Спасибо. Мне удалось проследить за ответом на сообщение StackExchange и добавить PROMPT_EOL_MARK='' в свой файл ~/.zshrc, чтобы удалить знак %.
Это очень интересный ответ! Хорошо знать.