求一个算法:保留html内容,但是不计算html内容的长度

oliverkahn 2009-11-30 11:35:50
现有字符串
String str3 = "I <font color = 'red'><b><u>have</u></b></font> a <font style='font-weight:bold; color:red;'> dream </font> ! ";


我想要的效果是:
1、保留上述字符串中的html代码部分
2、上述字符串中html代码部分的长度不计算

如果规定长度为10,那么最终的效果应该是:
I <font color = 'red'><b><u>have</u></b></font> a <font style='font-weight:bold; color:red;'>d</font>

在网上找了好久都没找到,求助大家了,谢谢!
...全文
110 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
amyzhangqian 2009-11-30
  • 打赏
  • 举报
回复
不知道哦
oliverkahn 2009-11-30
  • 打赏
  • 举报
回复
我意思就是:
比如有个标题是I have a dream!,
现在要按给定的长度截取,比如截取前10个字符。
但是这个标题有样式,我想保留样式,但是样式部分(html代码部分)的长度不计算在内。
bingliang008 2009-11-30
  • 打赏
  • 举报
回复
你说什么啊?我怎么不理解你说的意思?
oliverkahn 2009-11-30
  • 打赏
  • 举报
回复
谢谢楼上,带html代码的字符串已经完全实现了需求的功能,而且就这么简洁的代码,你太强了。
能不能留个QQ号,交个朋友,以后多多向你学习,谢谢:)
规律 2009-11-30
  • 打赏
  • 举报
回复
本来还觉得明白,你说了以后想想确实不是你要的那个意思,还不是很确定你的意思,你再看看,是不是这个意思
package com.datacomo.test;

public class test
{
public static void main(String [] args)
{
//String str = "I <font color = 'red'><b><u>have </u></b></font>a <font style='font-weight:bold; color:red;'>dream </font> ! ";
String str="I <font color = 'red'>have </font>a <font color = 'green'>dream </font> !";
int max=10;
boolean ret=true;
boolean ret1=true;
int num=0;
String result="";
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='<')
ret=false;
else if(ret)
num++;
if(ret1||ret==false)
result=result+String.valueOf(str.charAt(i));
if(num==max)
{
ret1=!ret1;
result=result+"...";
}
if(str.charAt(i)=='>')
ret=true;
}
System.out.println(result);
}
}
oliverkahn 2009-11-30
  • 打赏
  • 举报
回复
7楼的评论是针对5楼的方法。
6楼的方法对5楼是优化了,但是给定的字符串不是一定有html代码的,也有可能是正常的字符串。
oliverkahn 2009-11-30
  • 打赏
  • 举报
回复
谢谢楼上,已经接近了,不过当str="I <font color = 'red'> have </font> a <font color = 'green'> dream </font> !"时,返回值就不对了。

楼上能不能给个具体的方法啊,比如:
//vc_str 给定的字符串
//i_length 给定的长度
//vc_postfix 达到给定长度后,截取字符串加上的后缀(比如在“I have a d”后面加上“...”)
Public String getTitleFilter(String vc_str, int i_length, String vc_postfix){

}

我也再根据楼上的思路自己想想,谢谢大家帮忙。
规律 2009-11-30
  • 打赏
  • 举报
回复
上面的那个有些问题,代码写的不是很好
package com.datacomo.test;

public class test
{
public static void main(String [] args)
{
String str = "I <font color = 'red'><b><u>have </u></b></font>a <font style='font-weight:bold; color:red;'>dream </font> ! ";
int max=10;
int flag=0;
int flag1=0;
boolean ret=true;
int num=0;
String result="";
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='<')
ret=false;
else if(str.charAt(i)=='>')
ret=true;
else if(ret)
num++;
if((num<=max||flag1==1)&&flag==0)
result=result+String.valueOf(str.charAt(i));
else
flag=1;
if(flag==1&&str.charAt(i)=='<')
{
flag=0;
flag1=1;
result=result+String.valueOf(str.charAt(i));
}
}
result=result.substring(0,result.lastIndexOf(">")+1);
System.out.println(result);
}
}
规律 2009-11-30
  • 打赏
  • 举报
回复
package com.datacomo.test;

public class test
{
public static void main(String [] args)
{
String str = "I <font color = 'red'><b><u>have </u></b></font>a <font style='font-weight:bold; color:red;'>dream </font> ! ";
int max=10;
int flag=0;
int flag1=0;
boolean ret=true;
int num=0;
String result="";
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='<')
ret=false;
else if(str.charAt(i)=='>')
ret=true;
else if(ret)
num++;
if((num<=max||flag1==1)&&flag==0)
result=result+String.valueOf(str.charAt(i));
else
flag=1;
if(flag==1&&str.charAt(i)=='<')
{
flag=0;
flag1=1;
result=result+String.valueOf(str.charAt(i));
}
}
System.out.println(result);
}
}
oliverkahn 2009-11-30
  • 打赏
  • 举报
回复
哪位大侠指点一下啊?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧