Scala: строка чавкает

у Scala есть API, чтобы сделать "громко жевание" на Строке? Preferrably, я хотел бы преобразовать строку "abcd \n" к "abcd"

Спасибо Ajay

5
задан user855 15 February 2010 в 22:52
поделиться

4 ответа

Если бы вы хотели сопоставить его с, скажем, Ctrl-E, это было бы что-то вроде:

inoremap <C-E> <C-N>

Проблема с Ctrl - Космос в том, что большинство терминалов просто увидят его как космос. Я предполагаю, что вы используете какую-то терминальную программу внутри X; если вы используете что-то другое, вам придется самостоятельно предоставить соответствующие замены.

Обычно readline Bash имеет Ctrl - V , сопоставленные для «обработки следующего ключа как литерала». Таким образом, нажатие Ctrl - V , а затем Home в командной строке bash вставит ^ [[H или что-то подобное в командной строке, вместо того, чтобы переходить к началу строки. Попробуйте нажать Ctrl - V , затем Ctrl - Пространства . Наверное, ты просто увидишь пространство.

В этом случае вам придется одурачиться с помощью xmodmap или написать собственные/ usr/share/X11/xkb/ * файлы, чтобы сказать X вывести что-то другое, когда вы нажмете Ctrl - Пространства . Такие программы, как Firefox, не волнуют; они определяют, какая базовая клавиша нажимается, и сами выясняют, какие модификаторы нажимаются. Но большинство программ на основе терминалов просто увидят Ctrl - Пространства в качестве Космоса, если только вы не укажете X обращаться с Космосом и Ctrl - Пространства по-другому.

Сомневаюсь, что вы можете внести это изменение только с помощью xmodmap; вероятно, вам потребуется выполнить взлом более низкого уровня/ usr/share/X11/xkb/ *. Это сложно, и я даже не знаю, используете ли вы X в первую очередь, так что я просто оставлю его там.

Некоторые терминалы, такие как urxvt, позволяют указать собственные клавиатуры. Как и Firefox, они могут указывать, когда это пространство и когда это пространство Control-Space, даже не делая ничего специального для настройки X. Таким образом, можно указать urxvt для вывода «\033I _ TYPED _ CONTROL _ SPACE _ DAMMIT »при нажатии клавиши Ctrl - пробел . Затем вы можете указать Vim, чтобы отобразить , что на < C-N > .

EDIT: я забыл, что Ctrl-пробел используется для вывода \0 (я переназначил это где-то еще на моей клавиатуре). В этом случае вся сложность, которую я описал выше, не нужна. То, что я сказал, будет применимо к тому, кто хочет использовать более экзотическое отображение, как Ctrl -колон или Alt - Пространства .

-121--1260927-

Если у вас есть время, это хорошая идея, если только для изучения веб-аспектов Java. Я бы предложил посмотреть на веб- рамку Java, такие как Spring MVC , Wicket или Struts , поскольку они упрощают разработку (после их изучения) и делают веб-приложения более тестируемыми и поддерживаемыми.

-121--4501483-

Если вы не хотите использовать Apache Commons Lang, вы можете свернуть свой собственный, по этим линиям.

scala> def chomp(text: String) = text.reverse.dropWhile(" \n\r".contains(_)).reverse
chomp: (text: String)String

scala> "[" + chomp(" a b cd\r \n") + "]"
res28: java.lang.String = [ a b cd]
4
ответ дан 18 December 2019 в 07:54
поделиться

На самом деле существует готовая поддержка для chomp 1

scala> val input = "abcd\n"
input: java.lang.String =
abcd


scala> "[%s]".format(input)
res2: String =
[abcd
]

scala> val chomped = input.stripLineEnd
chomped: String = abcd

scala> "[%s]".format(chomped)
res3: String = [abcd]

1 для некоторого определения chomp; на самом деле тот же ответ, что и у sepp2k, но показывает, как его использовать в String

4
ответ дан 18 December 2019 в 07:54
поделиться

Есть java.lang.String.trim () , но при этом также удаляются начальные пробелы. Также существует RichString.stripLineEnd , но при этом удаляются только \ n и \ r .

11
ответ дан 18 December 2019 в 07:54
поделиться

Почему бы не использовать Apache Commons Lang и функцию StringUtils.chomp()? Одна из замечательных особенностей Scala заключается в том, что вы можете использовать существующие библиотеки Java.

1
ответ дан 18 December 2019 в 07:54
поделиться
Другие вопросы по тегам:

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