字符串处理

tangtoyin04 2009-12-01 02:33:13
我有这么一串字符串(<a href="/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls"><tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls</tt></a></td>)

乱码问题就不管他.但是我只想得到(CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls"><tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls)
该怎么处理啊.麻烦各位给点方法.
...全文
155 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛麦康纳 2009-12-01
  • 打赏
  • 举报
回复
最简单的答案来了:
String str = (........);//你的东西
str.substring(str.indexOf("/xlsfiles/")+"/xlsfiles/".length(),str.indexOf("</tt>"));
MashiMaro_001 2009-12-01
  • 打赏
  • 举报
回复
长知识了
zhuzeitou 2009-12-01
  • 打赏
  • 举报
回复
我的意思其实是不要一起取出来,既然是一样的,单独取一段就好了,全取出来中间还有那啥的多余内容啊

要一起去出来稍微改一点点就好了,把懒惰改贪婪……
	public static void main(String[] args) {
String s = "<a href=\"/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls\"> <tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls </tt> </a> </td>";
String regex = "(CDMA.*xls)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
}


保险一点
	public static void main(String[] args) {
String s = "<a href=\"/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls\"> <tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls </tt> </a> </td>";
String regex = "<a href.*?(CDMA.*?xls) </tt> </a> </td>";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
}
@井九 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bingliang008 的回复:]
String str = " <a href="/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls"> <tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls </tt> </a> </td>";

String str_ok = str.replaceAll(" <a href="/creport/files/20091130/xlsfiles/ ,","").replaceAll(" </tt> </a> </td>","");

比较白痴的做法~~~~~~~~~~

[/Quote]
满足需求的话,挺好的做法
crazylaa 2009-12-01
  • 打赏
  • 举报
回复
就是你昨天不能下载中文文件的那个问题吧?
crazylaa 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tangtoyin04 的回复:]
引用 9 楼 zhuzeitou 的回复:
问题是cdma到xls有两段,你要取也应该分开取吧………………

Java codepublicstaticvoid main(String[] args) {
        String s=" <a href=\"/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls\"> <tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls </tt> </a> </td>";
        String regex="(CDMA.*?xls)";
        Pattern p= Pattern.compile(regex);
        Matcher m= p.matcher(s);while (m.find()) {
            System.out.println(m.group());
        }
    }

输出结果:
CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls
CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls

从cdma到xls有两段.难道这两段是一样的.只是纺码方式不同
[/Quote]

这两段是一样的。
第一段是你URLEncoder.encode造成的。第二段应该是页面和servlet里面编码不一样造成的,比如一个UTF-8,一个GBK or GB2312。
closewbq 2009-12-01
  • 打赏
  • 举报
回复

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest {
public static void main(String[] args) {
String s = "<a href=\"/creport/files/20091130/xlsfiles/" +
"CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls\">" +
"<tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls</tt></a></td>";
Pattern p = Pattern.compile("(?<=/).[^/]*\\.xls");
Matcher m = p.matcher(s);
if(m.find()) {
System.out.println(m.group());
}
}
}

zhuzeitou 2009-12-01
  • 打赏
  • 举报
回复
所以我觉得要分来获取啊………………
tangtoyin04 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhuzeitou 的回复:]
问题是cdma到xls有两段,你要取也应该分开取吧………………

Java codepublicstaticvoid main(String[] args) {
String s="<a href=\"/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls\"> <tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls </tt> </a> </td>";
String regex="(CDMA.*?xls)";
Pattern p= Pattern.compile(regex);
Matcher m= p.matcher(s);while (m.find()) {
System.out.println(m.group());
}
}

输出结果:
CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls
CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls
[/Quote]
从cdma到xls有两段.难道这两段是一样的.只是纺码方式不同
zhuzeitou 2009-12-01
  • 打赏
  • 举报
回复
问题是cdma到xls有两段,你要取也应该分开取吧………………

	public static void main(String[] args) {
String s = "<a href=\"/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls\"> <tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls </tt> </a> </td>";
String regex = "(CDMA.*?xls)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
}


输出结果:
CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls
CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls
tangtoyin04 2009-12-01
  • 打赏
  • 举报
回复
因为中间的乱码是编码问题.我想得到之后再来编码.....
从CDMA到xls有用.其它的都去掉
py330316117 2009-12-01
  • 打赏
  • 举报
回复
你是不是用输入输出流弄得,你把字符串写到文件中,当你读出来的时候还要在重新编码撑“iso-8859-1”然后用机器默认的编码形式输出
bingliang008 2009-12-01
  • 打赏
  • 举报
回复
达到你的要求,但是一点意义都没有,正如4楼说的,你要知道那些是可变的,如果用正则表达式来匹配
bingliang008 2009-12-01
  • 打赏
  • 举报
回复
String str = "<a href="/creport/files/20091130/xlsfiles/CDMA%E7%BD%91%E6%80%BB%E9%83%A8%E6%96%B0%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E5%B0%8F%E6%97%B6%E6%8A%A5%E8%A1%A8%242009-11-30_01-00-00.xls"> <tt>CDMA缃戞?婚儴鏂版寚鏍囦綋绯诲皬鏃舵姤琛?$2009-11-30_01-00-00.xls </tt> </a> </td>";

String str_ok = str.replaceAll("<a href="/creport/files/20091130/xlsfiles/ ,","").replaceAll("</tt> </a> </td>","");

比较白痴的做法~~~~~~~~~~
紫炎圣骑 2009-12-01
  • 打赏
  • 举报
回复
你需要说明下这串字符串中哪些是可变的,哪些是不变的,这样才能通过正则表达式来匹配,确定需要截取的字符串的位置。
zhuzeitou 2009-12-01
  • 打赏
  • 举报
回复
这个去掉的意义何在呢………………中间的"> <tt>也要留着啊?还是只取前一半或者后一半?
tangtoyin04 2009-12-01
  • 打赏
  • 举报
回复
对对
紫炎圣骑 2009-12-01
  • 打赏
  • 举报
回复
就是把<a href="/creport/files/20091130/xlsfiles/ ,</tt> </a> </td>去掉么?

62,621

社区成员

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

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