Как вставить символ в слово, сохраняя регистр

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

1
задан Saud Iqbal 13 April 2019 в 21:10
поделиться

2 ответа

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

 foreach($swears as $swear => $modified_swear) {
   $swear_pos = stripos($string, $swear);
   if($swear_pos !== false) {
     $swear_len = strlen($swear);
     if($swear_len >= 3) {
       $new_string = substr($string, 0, $swear_pos);
       $new_string .= substr($string, $swear_pos, $swear_len-2);
       $new_string .= '.';
       $new_string .= substr($string, $swear_pos+($swear_len-2));
       $string = $new_string;
     }
   }
}

Этот код работает, только если вы действительно пытались добавить одну точку перед двумя последние символы ругательства.

РЕДАКТИРОВАТЬ:

Новый код, который может изменять все вхождения списка слов.

    $searched_pattern = '/\b(?:';
foreach($swears as $swear => $modified_swear) {
  $searched_pattern .= '('.$swear.')|';
}
$searched_pattern = rtrim($searched_pattern, '|');
$searched_pattern .= ')\b/i';

$string = preg_replace_callback(
  $searched_pattern,
  function($matches) {
    $word = $matches[0];
    $swear_len = strlen($word);
    if($swear_len >= 3) {
      $new_word .= substr($word, 0, $swear_len-2);
      $new_word .= '.';
      $new_word .= substr($word, $swear_len-2);
      $word = $new_word;
    }
    return $word;
  },
  $string
);
0
ответ дан Charles.C 13 April 2019 в 21:10
поделиться

Я не точно ясен, что Вы хотите? Существуют альтернативы для этого теста. Затем сделайте str_replace, вставляющий символ в определенное положение.

   <?php
$string = "Quick brown fOx jumps right over the lazy dog.";
$swears = array(
    "BROWN" => "BRO.WN",
    "fox"  => "f.ox",
    "Dog"  => "D.og"
);
$string_arr = explode(" ",$string);
    $swears_arr = array_keys($swears);
    foreach ($swears as $swear_key => $swear_word) {
    foreach ($string_arr as $key => $word) {
        if (preg_replace('/[^a-z]+/i', '', strtolower($word)) == strtolower($swear_key)) {
             $string_arr[$key] = substr_replace($word, '.', 1, 0);
                                 }
                                            } 
                                                   }

    // put the sentence back together:

    $new_string = implode(" ",$string_arr);
print_r($new_string);
    ?>
0
ответ дан Danny F 14 April 2019 в 17:24
поделиться
Другие вопросы по тегам:

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