Angel丶守护&雪之源 2024-04-11 15:01 采纳率: 22%
浏览 3

如何用递归方式从字符串中每3000字节内最后一个标点符号中进行截取字符串,截取包含标点符号

有以下字符串:
let str = '作者:小飞飞,撰写于6月31日想当年,他所带岭的军队以锐不可挡之势,横扫大江南北,可以说是在父兄基业上既往开来,成就了一番伟业。原本偏安一隅的小国,从他的手中变成了十三个州,国人对这位领袖的敬意由然而生。威望的增加、权利的扩张丝毫没有改变他原有的样样子,他迈步走进岳楼,回忆起在湖北省张家界市的一段往事。那是一个薄雾蒙蒙的清晨,在急促行军途中他与一位素未谋面的人相逢,虽然之后并没有太多故事,却至今难以忘却,正当他的思绪陷入过往,忽然一阵震天的马蹄声夹杂着士兵的喧闹传来,报:“敌人来袭,我方战线危机,望将军火速驰援”。由于刚刚陷入过往的原因,他稍微愣了愣神,咆哮道:“大军听令,即刻出发”!军令如山。成群的士兵迅速从营房中跑出在校场上整齐队列,方阵如虹、战马昂首、刀枪如林、战旗迎风飘扬,将士身上的盔甲在阳光照射下,闪耀着金属的光泽。看着这支曾跟着他南征北战的队伍,他默默翻身登上战马,走在队伍最前面。营房外的道路两旁站满了欢送的百姓,大家希望将军能带领着军队,再次创造奇迹。按照家庭开支计划,我今天可以使用五十元钱。我兴致勃勃地捏着钱,豪情万丈地走出家门,来到菜市场。那菜市场人头攒动,摊位林立,可真是热闹非凡。我探头探脑地来回晃悠,真不知道该买什么。第一回当家,又想烧点儿好吃的犒劳老爸老妈,可又得挑自己会做的买,真是难煞人也!我在菜市场转悠了半天,引来许多奇怪的目光,我的脑门上都渗出汗来,脸蛋儿一定红得像关公。从买早点到买菜,一切还算顺利,可到了做午饭时,我遇到了麻烦。我卷袖操刀,摆出一副大厨的模样准备为大家做“榨菜肉末汤”。可我在炒肉末的时候,刚放进肉馅,锅里的油就立刻“噼里啪啦”地飞溅起来。吓得我连忙倒退了几步,等它的声音听起来不那么吓人了,我才小心翼翼地凑上去继续翻炒。可一滴油还是飞溅到我的手上,吓地我大叫一声,忙又捂住嘴巴,偷眼一看,妈妈正津津有味地看着电视呢,幸亏呀幸亏,我这大厨的潇洒形象可得保住呀!我赶紧借来一本《品德与社会教学参考书》,认真地阅读。咦,这个词儿怎么解释呀?我这个也不会。查找字典吧,我一边准备,一边嘀咕。好,该写教案了。我拟定了教学目标,教学重点……认真地研究了课后的联系题。另外,我还从别的书上找到了一些与课文有关的故事,以防课上得枯燥无味。上什么形式的课呢?对,师傅不是经常叫我们要有创意吗?我把它上成活动课,同学们一定喜欢。昨天下午,我和同学正说着话,一不小心,我的白皮“嗖”地一声,从抽屉里滚了出来,我来不及多想,双腿一夹,“嚓”的一声,唉呀,我的小心肝也破了!我悔,我恨!我在心里一千遍一万遍地痛骂自己:“小甜甜呀,小甜甜,你好粗心呀,简直是个杀人凶手,连自己的亲生女儿都不能保护好!”我的眼泪也不争气地往下掉,师傅再三劝我,我也听不进去。何雨帮我把流了一地的蛋清蛋黄清除掉了,可我还是伤心不已,为什么人家的蛋安然无恙,我的“白皮”命运就这么惨呢?我越想越伤心,越想越难过。很荣幸,第一个站岗指挥交通的就是我。我迫不及待地上了“安全岛”,想领略指挥交通的滋味。但是,我望着那各种各样、穿梭不息的车辆时,不禁茫然了。我的心像装了小兔子似的,砰砰直跳。也许是紧张,我站在岗上呆立不动,心想:这么多的车辆,怎么指挥呀!“别怕,按平常的手势做就行了!”指导员苏师傅大声喊道。对,放大胆点!我定了定神,昂首挺胸,双手五指并拢,右手在胸前平行举起,,左手有节奏地向后摆动,做起右转弯的动作。这一回,每一辆汽车都“听话”地转弯了。'

每一个汉字为3字节,标点符号正常计算字节,如何用递归方式从字符串中每3000字节内出现的最后一个标点符号中进行截取字符串,截取包含标点符号,并把截取到的内容存进数组中

  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-04-11 15:32
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    你好!这个问题可以通过递归方式来解决。首先,我们需要定义一个递归函数,该函数接收一个字符串和一个起始索引作为参数,然后在字符串中每3000字节内找到最后一个标点符号的位置,将该位置之前的内容截取下来,并将结果存入数组中。
    下面是解决方案的步骤:

    1. 定义递归函数 splitString,接收字符串 str 和起始索引 startIdx 作为参数。
    2. 在函数中,设定一个截取范围 endIdx,为 startIdx 加上3000字节,但要确保 endIdx 不超过字符串长度。
    3. endIdx 开始向前搜索,找到最后一个标点符号的位置,记为 lastPunctuationIdx
    4. 截取从 startIdxlastPunctuationIdx 的子串,并将其存入结果数组中。
    5. 如果 lastPunctuationIdx 不是字符串末尾,则递归调用 splitString 函数,起始索引为 lastPunctuationIdx + 1
    6. 如果 lastPunctuationIdx 是字符串末尾,则说明已经处理完整个字符串,停止递归。
      以下是具体的代码实现:
      javascriptCopy code
      let str = '...'; // 这里放入你提供的字符串
      let resultArray = [];
      function splitString(str, startIdx) {
      if (startIdx >= str.length) {
      return;
      }
      let endIdx = Math.min(startIdx + 3000, str.length);
      let lastPunctuationIdx = startIdx;
      for (let i = startIdx; i < endIdx; i++) {
      if (/[。?!;:,.!?]/.test(str[i])) { // 匹配标点符号
      lastPunctuationIdx = i;
      }
      }
      let substring = str.slice(startIdx, lastPunctuationIdx + 1);
      resultArray.push(substring);
      if (lastPunctuationIdx !== str.length - 1) {
      splitString(str, lastPunctuationIdx + 1);
      }
      }
      splitString(str, 0);
      console.log(resultArray);
      
      这段代码会将截取的子串存入 resultArray 中,并在递归结束后输出结果。如果你有任何疑问或者需要进一步的解释,请随时告诉我!

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    评论

报告相同问题?

问题事件

  • 修改了问题 4月11日
  • 创建了问题 4月11日

悬赏问题

  • ¥20 python爬虫遇到空文本取不出来
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入