Окружите кавычками

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

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

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

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

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

35
задан Jonathan Leffler 25 August 2015 в 22:49
поделиться

4 ответа

Найдите/Замените с regex опцией включенный. Найдите:

^(.*)$

Замена:

"$1" +

ну, последняя строка будет иметь излишек +, необходимо удалить ее вручную.

4
ответ дан Rafał Dowgird 27 November 2019 в 06:37
поделиться

Возможно, это не то, что Вы имеете в виду, но...

, Если я нахожусь на строке в Eclipse и я ввожу двойные кавычки, затем в той вставке многострочный выбор (как Ваш xyz пример), это вставит как это:

"xxxx\n" +   
"yyyy\n" +  
"zzz"

Тогда Вы могли просто найти/заменить в выборе для "\n" к "", если бы Вы не предназначали новых строк.

я думаю опция включить, это находится в Window/Preferences, под Java/Editor/Typing/, установите флажок рядом с "Escape text when pasting into a string literal". (Eclipse 3.4 Ganymede)

88
ответ дан CoderCroc 27 November 2019 в 06:37
поделиться

Это не может быть точно ответом, который Вы ищете. Можно легко достигнуть того, что Вы спрашиваете при помощи sed потокового редактора. Это доступно на всех разновидностях Unix, и также в Windows, путем загрузки инструментария как cygwin. На оболочке Unix командная строка выполняет команду

sed 's/^/"/;s/$/"+/'

и вставляет текст, который Вы хотите преобразовать. На его выводе Вы получите преобразованный текст. Аргумент передал sed, говорит замена (замены) начало строки (^) с кавычкой и заменой (заменами) конец каждой строки ($) с кавычкой и плюс.

, Если текст Вы хотите преобразовать, является большим, можно хотеть перенаправить ввод и вывод sed через файлы. В таком случае, выполненном что-то как

   sed 's/^/"/;s/$/"+/' <inputfile >outputfile

В Windows, можно также использовать winclip команду эти , Обманывают комплект инструментов для прямого изменения то, что находится в буфере обмена. Просто выполненный

winclip -p | sed 's/^/"/;s/$/"+/' | winclip -c

вышеупомянутая команда вставит содержание буфера обмена в sed и результат назад в буфер обмена.

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

2
ответ дан Diomidis Spinellis 27 November 2019 в 06:37
поделиться

Я пошел бы с Найти/Заменить затмением в regexp режиме:

  • Найдите:

    ^ ((?:\s(?) \S?) ((?:\s (?! [\r\n])) )

  • Замена

    \1" \2" \3 +

сохранит точно безотносительно пространства или вкладок, которые Вы имеете прежде и после каждой строки и окружите их необходимыми двойными кавычками. (в последний раз '+' должен быть удален)

3
ответ дан VonC 27 November 2019 в 06:37
поделиться
Другие вопросы по тегам:

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