Как получить первые n символов строки без проверки размера или выхода за пределы?

curses могут сделать это также:

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'
144
задан antony.trupe 31 March 2019 в 13:19
поделиться

3 ответа

Вот отличное решение:

String upToNCharacters = s.substring(0, Math.min(s.length(), n));

Мнение: хотя это решение «изящное», я думаю, что оно на самом деле менее читабельно , чем решение, использующее , если / else очевидным образом. Если читатель не видел этого трюка, ему / ей придется подумать больше, чтобы понять код. ИМО, значение кода более очевидно в версии if / else . Чтобы получить более чистое и удобочитаемое решение, см. Ответ @paxdiablo.

333
ответ дан 23 November 2019 в 22:12
поделиться

Есть класс вопросов по SO, которые иногда не имеют смысла, этот вопрос опасно близок: -)

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

Если это просто потому, что вы этого не делаете.

12
ответ дан 23 November 2019 в 22:12
поделиться

Используйте метод подстроки следующим образом:

int n = 8;
String s = "Hello, World!";
System.out.println(s.substring(0,n);

Если n больше длины строки, это вызовет исключение, как указал один комментатор. одно простое решение - заключить все это в условие if (s.length () в вашем предложении else , вы можете выбрать, хотите ли вы просто печатать / возвращать целую строку или обработайте ее другим способом.

3
ответ дан 23 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

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