首页 > 解决方案 > 在确定大小的数组中拆分字符串而不拆分单词

问题描述

我需要创建能够将较大的字符串拆分为较小字符串的数组但白色拆分单词的函数。就我而言,我有一条超过 5000 个字符的大型短信,我需要拆分为 2048 个字符的字符串。

.

为此,我创建了这个函数(例如,我分成 512 个字符):

  var split = function(input, maxCharacter) {
    var returnString = "";
    var returnArray = [];
    var i;
    for (i = 0; i < input.length; i++) {
      returnString += input[i];
      if (returnString.length >= maxCharacter) {
        var sav = returnString.length - 1;
        var j = returnString.length - 1;
        while (returnString[j] !== " " && j > maxCharacter * 0.9) {
          returnString = returnString.slice(0, returnString.length - 1);
          j = j - 1;
        }
        returnArray.push(returnString);
        returnString = "";
        i = i - (sav - j);
      }
    }
    return returnArray;
  };

  console.log(
    split(
      `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor rhoncus ex non tristique. Cras in consectetur dui, tincidunt luctus dui. Duis suscipit volutpat ex nec lacinia. Nullam vitae nibh orci. Fusce laoreet fermentum leo eu tincidunt. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed id quam diam. Quisque tempus orci quis nibh pretium luctus. Aenean fermentum, risus at pretium tristique, urna ipsum luctus felis, molestie luctus purus mi vitae ligula. Etiam elementum viverra orci ut maximus. Pellentesque interdum vel leo sed tristique.Integer est ligula, sodales a viverra eget, molestie eget ex. Vivamus hendrerit fermentum magna ac suscipit. Sed vitae sem leo. In eget eleifend sapien. Nunc congue, orci non accumsan placerat, sapien nulla tristique ante, eget dignissim quam diam non ipsum. Aenean lacinia nec erat consequat bibendum. Proin aliquam lobortis sem, ultricies efficitur mi fringilla et. Duis eu venenatis sapien. Nulla iaculis pharetra rhoncus. Suspendisse convallis convallis purus quis imperdiet.`,
      512
    )
  );
但是通过这个函数,我得到了第一个字符串或两个第一个字符串。有时我只有无限循环

标签: javascript

解决方案


不是非常快,但非常灵活。

var split = (stringValue, splitChar) => {
  const splitBy = splitChar ? splitChar : ' ';

  const occuranceMatch = (stringValue.match(new RegExp(splitBy, 'g')) || []);
  if (!occuranceMatch) {
    return stringValue;
  }

  const totalSplitByOccurances = occuranceMatch.length;
  if (totalSplitByOccurances === 0) {
    return stringValue;
  }

  const start = 0;
  let splitIndex = stringValue.indexOf(splitBy);
  let tempStringValue = stringValue.slice();
  const strings = [];
  for (let i = 0; i < totalSplitByOccurances; ++i) {
    const value = tempStringValue.substring(start, splitIndex);
    strings.push(value.trim());

    tempStringValue = tempStringValue.substring(splitIndex + 1, tempStringValue.length).trim();
    splitIndex = tempStringValue.indexOf(splitBy);
  }

  return strings;
}


const string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

console.log(split(string, ','));

// or 

console.log(split(string));


推荐阅读