разность рубиновая строка или массив

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
54
задан Gerry 30 June 2016 в 13:34
поделиться

8 ответов

diff.rb - то, что Вы хотите, который доступен в http://users.cybercity.dk/~dsl8950/ruby/diff.html через интернет-архив:

http://web.archive.org/web/20140421214841/http://users.cybercity.dk:80/~dsl8950/ruby/diff.html

20
ответ дан Gavin Miller 7 November 2019 в 07:53
поделиться

Для массивов используйте минус оператор. Например:

>> foo = [1, 2, 3]
=> [1, 2, 3]
>> goo = [2, 3, 4]
=> [2, 3, 4]
>> foo - goo
=> [1]

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

32
ответ дан Chris Bunch 7 November 2019 в 07:53
поделиться

Для строк я сначала испытал бы Драгоценный камень Ruby, который @sam-saffron упомянул ниже. Легче установить: http://github.com/pvande/differ/tree/master

gem install differ

irb
require 'differ'

one = "one two three"
two = "one two 3"

Differ.format = :color
puts Differ.diff_by_word(one, two).to_s

Differ.format = :html
puts Differ.diff_by_word(one, two).to_s
19
ответ дан 4 revs, 3 users 72% 7 November 2019 в 07:53
поделиться

Существует также diff-lcs, который доступен как драгоценный камень. <забастовка> Это не было обновлено с 2004, но , мы использовали его без любой проблемы.

Редактирование: А новая версия была выпущена в 2011. Похож это вернулось в активной разработке.

http://rubygems.org/gems/diff-lcs

5
ответ дан Grant Hutchins 7 November 2019 в 07:53
поделиться

HTMLDiff, который @ da01 упоминает выше, работал для меня. 1240 Выглядит неплохо. Кстати, я использовал это с плагином acts_as_audited .

5
ответ дан Brian Armstrong 7 November 2019 в 07:53
поделиться

Я только что нашел новый проект, который кажется довольно гибким:

http://github.com/pvande/differ/tree/master

Пробую и попытаюсь опубликовать какой-то отчет.

2
ответ дан 7 November 2019 в 07:53
поделиться

У меня были те же сомнения, и решение, которое я нашел, не на 100% рубин, но это лучшее для меня. Проблема с diff.rb в том, что у него нет удобного средства форматирования, чтобы показать различия в гуманизированной форме. Итак, я использовал diff из ОС с этим кодом:

 def diff str1, str2
   system "diff #{file_for str1} #{file_for str2}"
 end

 private
 def file_for text
   exp = Tempfile.new("bk", "/tmp").open
   exp.write(text)
   exp.close
   exp.path
 end
2
ответ дан 7 November 2019 в 07:53
поделиться

Меня расстроило отсутствие хорошей библиотеки для этого на Ruby, поэтому я написал http://github.com/samg/diffy . Он скрытно использует diff и делает упор на удобство и предоставляет красивые параметры вывода.

24
ответ дан 7 November 2019 в 07:53
поделиться
Другие вопросы по тегам:

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