JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで指定した文字数を超えた空白位置にだけ改行を挿入する方法

はじめに

本記事では、2つの引数を受け取る関数 breakString() を作成します。第1引数には改行処理の対象となる文字列、第2引数にはしきい値となる文字数を渡します。この関数は、直前の改行からの文字数がしきい値を超えた状態で空白が出現したとき、その空白を改行コード(\n)に置き換えていくというものです。

処理のイメージ

たとえば「4文字以上改行なしで経過したら、最も近い空白の位置で改行したい」場合は、次のように関数を呼び出します。

const text = 'Hey can I call you by your name?';
console.log(breakString(text, 4));

期待される出力は以下の通りです。

Hey can
I call
you by
your
name?

アルゴリズムの考え方

実装のアプローチはシンプルです。forループで文字列を先頭から1文字ずつ走査し、直前に改行を挿入してから何文字が経過したかをカウントしていきます。

  • カウントがしきい値以上になっており、かつ現在の文字が空白である場合 → 新しい文字列に改行コード \n を追加し、カウントを0にリセットする
  • それ以外の場合 → 元の文字をそのまま新しい文字列に追加し、カウントを1増やす

この処理を文字列の末尾まで繰り返すことで、空白位置のみを改行ポイントとして整形された文字列が得られます。

完全なコード例

上記のロジックを実装したコード全体は以下のようになります。

const text = 'Hey can I call you by your name?';
const breakString = (str, limit) => {
    let brokenString = '';
    for(let i = 0, count = 0; i < str.length; i++){
        if(count >= limit && str[i] === ' '){
            count = 0;
            brokenString += '\n';
        }else{
            count++;
            brokenString += str[i];
        }
    }
    return brokenString;
}
console.log(breakString(text, 4));

出力結果

コンソールには以下のように出力されます。空白以外の位置では改行されず、しきい値を超えた後に最初に出てきた空白だけで折り返されているのが確認できます。

Hey can
I call
you by
your
name?
  1. JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説

    JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod

  2. JavaScriptで文字列内の2つ以上の連続スペースを1つのスペースに変換する方法

    概要 HTMLの入力欄からユーザーが入力した文字列をJavaScriptで受け取り、その中に含まれる「2つ以上の連続した空白」を検出し、すべて1つのスペースに置き換えるプログラムを作成します。このような処理には正規表現を使うのが最もシンプルで確実な方法です。replace()メソッドの第1引数に正規表現 /\s{2}/g を指定することで、目的の結果を簡単に得られます。 使用する正規表現のポイント \s:半角スペース・タブ・改行などの空白文字にマッチします。 {2}:直前のパターンが2回以上連続する場合にマッチします。 g(グローバルフラグ):文字列内のすべての該当箇所を置換対象にします。