public function camelCase($is_upper = false)
    {
        $func = function (&$v, $k, $is_upper) {
            $v = new S($v);
            $c = $v->chunk;
            if ($is_upper || $k != 0) {
                $first = $c->key_0->upper;
            } else {
                $first = $c->key_0->lower;
            }

            $c->replace(0, $first);

            $v = $c->join;
        };

        $a = new A(
            explode(
                '_',
                trim(
                    preg_replace(
                        '/_+/',
                        '_',
                        preg_replace(
                            '/[^\p{Ll}\p{Lu}0-9_]/u',
                            '_',
                            preg_replace(
                                '/[\s]+/u',
                                '_',
                                trim($this->value)
                            )
                        )
                    ),
                    '_'
                )
            )
        );
        return $a->walk($func, $is_upper)->join;
    }