Как считать единственный символ из консоли в Java (поскольку пользователь вводит его)?

Xcode 10.2 • Swift 5

Вы можете расширить StringProtocol, чтобы сделать индекс доступным также для подстрок:

extension StringProtocol {        
    subscript(offset: Int) -> Element {
        return self[index(startIndex, offsetBy: offset)]
    }
    subscript(_ range: Range<Int>) -> SubSequence {
        return prefix(range.lowerBound + range.count)
            .suffix(range.count)
    }
    subscript(range: ClosedRange<Int>) -> SubSequence {
        return prefix(range.lowerBound + range.count)
            .suffix(range.count)
    }
    subscript(range: PartialRangeThrough<Int>) -> SubSequence {
        return prefix(range.upperBound.advanced(by: 1))
    }
    subscript(range: PartialRangeUpTo<Int>) -> SubSequence {
        return prefix(range.upperBound)
    }
    subscript(range: PartialRangeFrom<Int>) -> SubSequence {
        return suffix(Swift.max(0, count - range.lowerBound))
    }
}

extension LosslessStringConvertible {
    var string: String { return .init(self) }
}

extension BidirectionalCollection {
    subscript(safe offset: Int) -> Element? {
        guard !isEmpty, let i = index(startIndex, offsetBy: offset, limitedBy: index(before: endIndex)) else { return nil }
        return self[i]
    }
}
<час>

Тестирование

let test = "Hello USA          
100
задан Thomas Ahle 9 April 2014 в 11:25
поделиться

1 ответ

Что вы хотите сделать, так это перевести консоль в "сырой" режим (строковое редактирование игнорируется и клавиша ввода не требуется) в отличие от "приготовленного" режима (требуется редактирование строки с помощью клавиши ввода). В системах UNIX команда 'stty' может изменять режимы.

Теперь, что касается Java ... см. Неблокирующий ввод консоли в Python и Java . Отрывок:

Если ваша программа должна быть консольной, вы должны выключить свой терминал строчного режима в символьный, и не забудьте восстановить его до вашего программа завершает работу. Нет портативного способ сделать это через операционные систем.

Одно из предложений - использовать JNI. Опять же, это не очень удобно. Еще одно предложение в конце обсуждения и общее с сообщением выше - посмотреть на использование jCurses .

57
ответ дан 24 November 2019 в 04:55
поделиться
Другие вопросы по тегам:

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