JavaScriptで文字列をn個の等しい部分に分割する方法を解説
本記事では、文字列と数値 n を引数として受け取り(n は文字列の長さをちょうど割り切れる値とします)、その文字列を n 個の等しい部分に分割した配列を返す JavaScript 関数の作成方法を解説します。
例えば、長さ 23 文字の文字列を 5 で分割する場合、各部分は 4〜5 文字ずつに分けられます。それでは、実際のコードを見ていきましょう。
実装コード
const str = 'this is a sample string';
const num = 5;
const divideEqual = (str, num) => {
const len = str.length / num;
const creds = str.split("").reduce((acc, val) => {
let { res, currInd } = acc;
if(!res[currInd] || res[currInd].length < len){
res[currInd] = (res[currInd] || "") + val;
}else{
res[++currInd] = val;
};
return { res, currInd };
}, {
res: [],
currInd: 0
});
return creds.res;
};
console.log(divideEqual(str, num));
実行結果
コンソールには以下のように出力されます。
[ 'this ', 'is a ', 'sampl', 'e str', 'ing' ]
コードの解説
この関数の処理の流れは以下のとおりです。
1. 各部分の長さを計算: 文字列の長さを n で割り、1 つあたりの部分文字列の長さを求めます。
2. 文字列を分解: split("") を使って文字列を 1 文字ずつの配列に変換します。
3. reduce() で組み立て: reduce() を使って各文字を順番に処理し、現在のインデックスの部分文字列が指定の長さに達するまで文字を追加していきます。長さに達したら、インデックスを 1 つ進めて次の部分文字列の組み立てに移ります。
よりシンプルな代替方法
ループと slice() を使えば、より簡潔に実装することもできます。
const divideEqual = (str, num) => {
const len = str.length / num;
const result = [];
for (let i = 0; i < num; i++) {
result.push(str.slice(i * len, (i + 1) * len));
}
return result;
};
console.log(divideEqual('this is a sample string', 5));
こちらの方法では、開始位置と終了位置を計算して slice() で切り出すだけなので、処理の意図が直感的にわかりやすいのが特徴です。用途や可読性の要件に応じて、使いやすい方を選択するとよいでしょう。
-
C++で文字列をN個の等しい部分に分割する方法を解説
このチュートリアルでは、与えられた文字列をN個の等しい部分に分割するC++プログラムの作成方法を解説します。文字列がN等分できない場合は、その旨のメッセージを出力します。それでは、問題を解決するための手順を順番に見ていきましょう。解決手順文字列と分割数Nを初期化します。sizeメソッドを使って文字列の長さを取得します。文字列がN個の部分に均等に分割できるかどうかを判定します。N等分できない場合は、その旨のメッセージを出力します。分割できる場合は、文字列を走査しながら各部分を出力します。サンプルコード実際のコードを見てみましょう。#include <bits/stdc++.h> us
-
【Java】文字列をN等分に分割するプログラムの書き方
この記事では、Javaを使って文字列を「N」個の等しい部分に分割する方法を解説します。文字列(String)とは、1つ以上の文字を含み、ダブルクォート(“ ”)で囲まれたデータ型のことです。まずは、どのような動作になるのか具体的な例を見てみましょう。実行例入力:入力文字列: Java Program is fun!期待される出力:文字列の長さ: 20 指定された文字列を4等分すると: Java Progr am is fun!アルゴリズムステップ1 - 処理を開始する ステップ2 - 文字列 input_string、整数 string_length と N を宣言する