一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

java去掉文本中多余的空格与空行实例代码

时间:2022-06-29 01:24:53 编辑:袖梨 来源:一聚教程网

最近因为工作的需要,在开发一个小型的圈子系统。功能类似一个简化的微博。用户可以在圈子里发帖子,回复帖子,点赞等等。项目上线不久就发现有很多用户在圈子里发广告,手段之丰富令人叹为观止啊。产品大哥昨天突然跑过来跟我说:现在圈子里有很多广告,而且发广告的人为了吸引别人的注意力经常会发出很多带有很多空行和空格的帖子跟回复。这样一个帖子就会沾满屏幕,十分影响使用。产品大哥要求我立即开发一套过滤逻辑,删除多余的空格和帖子,下面话不多说了,来一起看看详细的介绍:

需求

按照如下要求处理字符串

  • 字符串中连续的空格数不能大于5,大于5时只保留5个
  • 字符串中含有的连续空行数不能大于2,大于2时只保留2个

分析

  • 记得之前的老大说过,字符串处理如果能不用正则表达式就不用,那个性能不好
  • 分析一下实际应用场景,全是空格的一行也应该被算作空行。否则哪天发广告的人发现了这个漏洞就会利用起来。
  • n和rn都需要处理

实现代码

/**
* 移除多余空行和空格
*/
publicstaticString dealRedundantSpaceAndBlankLine(String content)
{
 if(content ==null|| content.length() ==0)
 {
  return"";
 }
 StringBuilder strAfterRemoveCRSB =newStringBuilder();
 for(inti =0; i < content.length(); i++)
 {
  if(content.charAt(i) !='r')
   strAfterRemoveCRSB.append(content.charAt(i));
 }
 String strAfterRemoveCR = strAfterRemoveCRSB.toString();
 if(strAfterRemoveCR ==null|| strAfterRemoveCR.length() ==0)
 {
  return"";
 }
 StringBuilder resultSB =newStringBuilder();
 String[] lines = strAfterRemoveCR.split("n");
 intblankCount =0;
 for(String line : lines)
 {
  if(line ==null)
  {
   continue;
  }
  String lineTrim = line.trim();
  if("".equals(lineTrim))
  {
   blankCount++;
   if(blankCount <=2) {
    resultSB.append("n");
   }
  }else{
   blankCount =0;
   resultSB.append(dealSpace4OneLine(line)).append("n");
  }
 }
 resultSB.deleteCharAt(resultSB.length() -1);
 returnresultSB.toString();
}
 
/**
* 移除1行中的多余空格
*/
publicstaticString dealSpace4OneLine(String line)
{
 if(line ==null||"".equals(line)) {
  return"";
 }
 intspaceCount =0;
 StringBuilder sb =newStringBuilder();
 for(inti =0; i < line.length(); i++) {
  charcurChar = line.charAt(i);
  if(curChar ==' ')
  {
   spaceCount++;
   if(spaceCount <=5) {
    sb.append(' ');
   }
  }else{
   spaceCount =0;
   sb.append(curChar);
  }
 }
 returnsb.toString();
}
 
publicstaticvoidmain(String[] args) {
 String str ="呵呵  测试nnnn   n rn将风控打扫房  间nnnn n n  快递费解封时代峰峻nrn 发的几点睡 ";
 String result = dealRedundantSpaceAndBlankLine(str);
 System.out.println(result);
}

热门栏目