curses могут сделать это также:
blockquote>import curses, time #-------------------------------------- def input_char(message): try: win = curses.initscr() win.addstr(0, 0, message) while True: ch = win.getch() if ch in range(32, 127): break time.sleep(0.05) except: raise finally: curses.endwin() return chr(ch) #-------------------------------------- c = input_char('Press s or n to continue:') if c.upper() == 'S': print 'YES'
Вот отличное решение:
String upToNCharacters = s.substring(0, Math.min(s.length(), n));
Мнение: хотя это решение «изящное», я думаю, что оно на самом деле менее читабельно , чем решение, использующее , если
/ else
очевидным образом. Если читатель не видел этого трюка, ему / ей придется подумать больше, чтобы понять код. ИМО, значение кода более очевидно в версии if
/ else
. Чтобы получить более чистое и удобочитаемое решение, см. Ответ @paxdiablo.
Есть класс вопросов по SO, которые иногда не имеют смысла, этот вопрос опасно близок: -)
Возможно, вы могли бы объяснить свое отвращение к использованию одного из двух методов, которые вы исключили.
Если это просто потому, что вы этого не делаете.
Используйте метод подстроки следующим образом:
int n = 8;
String s = "Hello, World!";
System.out.println(s.substring(0,n);
Если n больше длины строки, это вызовет исключение, как указал один комментатор. одно простое решение - заключить все это в условие if (s.length ()
else
, вы можете выбрать, хотите ли вы просто печатать / возвращать целую строку или обработайте ее другим способом.