Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Я на самом деле записал решение для этого на недавнем моем проекте. Я сжал большинство его вниз, чтобы быть немного меньшим.
def smart_truncate(content, length=100, suffix='...'):
if len(content) <= length:
return content
else:
return ' '.join(content[:length+1].split(' ')[0:-1]) + suffix
то, Что происходит, является проверками оператора "if", если Ваше содержание уже является меньше, чем предел. Если это не, это усекает к желаемой длине, разделениям на пространстве, удаляет последний элемент (так, чтобы Вы не отключали слово), и затем присоединяется к нему назад вместе (при прикреплении на '...').
Вот немного лучшая версия последней строки в решении Adam:
return content[:length].rsplit(' ', 1)[0]+suffix
(Это немного более эффективно, и возвращает более разумный результат в случае, нет никаких пробелов перед строкой.)
Существует несколько тонкости, которая может или не может быть проблемами для Вас, такими как обработка вкладок (Например, если Вы отображаете их как 8 пробелов, но рассматриваете их как 1 символ внутренне), обрабатывая различные ароматы повреждения и неразрывного пробела или разрешения повреждения на расстановке переносов и т.д., Если какое-либо из этого желательно, можно хотеть смотреть на модуль переноса текста. например:
def truncate(text, max_size):
if len(text) <= max_size:
return text
return textwrap.wrap(text, max_size-3)[0] + "..."
поведение по умолчанию для слов, больше, чем max_size, состоит в том, чтобы повредить их (делающий max_size жесткий предел). Можно измениться на мягкий предел, используемый некоторыми из других решений здесь путем передачи break_long_words=False для обертывания (), в этом случае он возвратит целое слово. Если Вы хотите это изменение поведения последняя строка к:
lines = textwrap.wrap(text, max_size-3, break_long_words=False)
return lines[0] + ("..." if len(lines)>1 else "")
существует несколько других опций как expand_tabs, который может представлять интерес в зависимости от точного поведения, которое Вы хотите.
def smart_truncate1(text, max_length=100, suffix='...'):
"""Returns a string of at most `max_length` characters, cutting
only at word-boundaries. If the string was truncated, `suffix`
will be appended.
"""
if len(text) > max_length:
pattern = r'^(.{0,%d}\S)\s.*' % (max_length-len(suffix)-1)
return re.sub(pattern, r'\1' + suffix, text)
else:
return text
ИЛИ
def smart_truncate2(text, min_length=100, suffix='...'):
"""If the `text` is more than `min_length` characters long,
it will be cut at the next word-boundary and `suffix`will
be appended.
"""
pattern = r'^(.{%d,}?\S)\s.*' % (min_length-1)
return re.sub(pattern, r'\1' + suffix, text)
ИЛИ
def smart_truncate3(text, length=100, suffix='...'):
"""Truncates `text`, on a word boundary, as close to
the target length it can come.
"""
slen = len(suffix)
pattern = r'^(.{0,%d}\S)\s+\S+' % (length-slen-1)
if len(text) > length:
match = re.match(pattern, text)
if match:
length0 = match.end(0)
length1 = match.end(1)
if abs(length0+slen-length) < abs(length1+slen-length):
return match.group(0) + suffix
else:
return match.group(1) + suffix
return text
def smart_truncate(s, width):
if s[width].isspace():
return s[0:width];
else:
return s[0:width].rsplit(None, 1)[0]
Тестирование его:
>>> smart_truncate('The quick brown fox jumped over the lazy dog.', 23) + "..."
'The quick brown fox...'