Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Эту проблему можно решить с помощью команды query-replace-regexp (привязан к CM -% ) :
CM -%
\ b [0-9] [0-9] \ b
return
\, (1+ \ # &)
Выражение, следующее за \,
будет оцениваться как выражение Лиспа, результат которого используется как строка замены. В выражении Лиспа \ # &
будет заменено совпавшей строкой, интерпретируемой как число.
По умолчанию это работает для всего документа, начиная с курсора. Чтобы эта работа работала с регионом, есть несколько возможностей:
См. Раздел Regexp Replacement Руководства по Emacs для более подробной информации.
Он не защищает от 99 -> 100.
(defun add-1-to-2-digits (b e)
"add 1 to every 2 digit number in the region"
(interactive "r")
(goto-char b)
(while (re-search-forward "\\b[0-9][0-9]\\b" e t)
(replace-match (number-to-string (+ 1 (string-to-int (match-string 0)))))))
Да, и это действует в регионе. Если вам нужен весь файл, замените b
и e
на (точка-мин)
и nil
.
Мне удалось заставить его работать по-другому, используя следующее (мой awk -fu не является сильным, поэтому он, вероятно, может можно сделать более простым способом):
C-u M-x shell-command-on-region RET awk '$2>=0&&$2<=99 {$2++} {print}' RET
но я потерял отступ в процессе :)
Видя все эти ответы, я не могу не испытывать большого уважения к Emacs ...
{{ 1}} Умеренно протестировано; используйте M -:
и введите следующую команду:
(while (re-search-forward "\\<[0-9][0-9]\\>" nil t) (let ((x (match-string 0))) (delete-backward-char 2) (insert (format "%d" (1+ (string-to-int x))))))
Emacs ' режим редактирования столбца - это то, что вам нужно.
Активируйте его, набрав M-x cua-mode .
Перейдите в начало прямоугольника (оставьте курсор на символе 3
) и нажмите C-RET .
Перейти в конец прямоугольника (оставьте курсор на символе 7
). Вы будете работать в выделенной области.
Теперь нажмите M-i , что увеличивает все значения в регионе.
Готово.! удалить мертвые ссылки ImageShack