C#截取一段字符串的问题。

whj_hbxf 2013-07-11 01:52:32
HTML代码中有这样一个控件:<input type="hidden" name="struts.token.name" value="xxxxxxxxxxx"/>.我要做的是截取value的值:XXXXXXXXXXXXX.

现在new一个WebBrowser,把HTML写入到HtmlDocument中再GetAttribute("Value")能正确取值,虽然也就几行代码的事,但是总感觉这样做对程序来说拐弯大了一点。于是又直接用string.Substring来做,结果总取错位置,是不是我没有处理双字节的缘故?另外我还不会用正则。

请教大家怎样做对程序来说效率高一点?麻烦给点代码最好,谢谢!
...全文
307 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
whj_hbxf 2013-07-11
  • 打赏
  • 举报
回复
引用 15 楼 u011096386 的回复:
我将你提供的html代码存在了 本地text
 StreamReader sr = new StreamReader(@"C:\Users\Administrator\Desktop\test.txt",System.Text.Encoding.Default);
        string str = sr.ReadToEnd();
        string result = "";
        string flagstr = "name=\"struts.token.name\" value=\"";
        int beginIndex = str.IndexOf(flagstr);
        if (beginIndex > -1)
        {
            int endIndex = str.IndexOf("\" />", beginIndex);
           result = str.Substring(beginIndex + flagstr.Length, endIndex - beginIndex -flagstr.Length);
        }
差别就是 将 int endIndex=str.IndexOf("\"/>",beginIndex); 变更为了如下(多了个空格) int endIndex = str.IndexOf("\" />", beginIndex); 我这已经得到了struts.token
谢谢了!!!原来问题就出在那个空格上面。
whj_hbxf 2013-07-11
  • 打赏
  • 举报
回复
引用 14 楼 czz65979674 的回复:
截取出来正常显示: 你个2HUO
请你看看12楼的代码,从那里截取,谢谢!
ztszhq 2013-07-11
  • 打赏
  • 举报
回复
我将你提供的html代码存在了 本地text
 StreamReader sr = new StreamReader(@"C:\Users\Administrator\Desktop\test.txt",System.Text.Encoding.Default);
        string str = sr.ReadToEnd();
        string result = "";
        string flagstr = "name=\"struts.token.name\" value=\"";
        int beginIndex = str.IndexOf(flagstr);
        if (beginIndex > -1)
        {
            int endIndex = str.IndexOf("\" />", beginIndex);
           result = str.Substring(beginIndex + flagstr.Length, endIndex - beginIndex -flagstr.Length);
        }
差别就是 将 int endIndex=str.IndexOf("\"/>",beginIndex); 变更为了如下(多了个空格) int endIndex = str.IndexOf("\" />", beginIndex); 我这已经得到了struts.token
czz65979674 2013-07-11
  • 打赏
  • 举报
回复
截取出来正常显示: 你个2HUO
czz65979674 2013-07-11
  • 打赏
  • 举报
回复
string.Substring 按照C#来说 Substring截的是字符而不是字节,这和c++是不同的
public string value = "";
        string value2 = "value=\"";
        private void button1_Click(object sender, EventArgs e)
        {
            value = this.textBox1.Text;
            this.textBox1.Text = value.Substring(value.IndexOf(value2) + value2.Length, value.LastIndexOf("\"") - value.IndexOf("value=\"") - value2.Length);
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            this.textBox1.Text = "<input type=\"hidden\" name=\"struts.token.name\" value=\"你个2HUO\"/>";
        }
whj_hbxf 2013-07-11
  • 打赏
  • 举报
回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
		<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
		<title>卧龙吟大型战争策略型网页游戏</title>
		<meta http-equiv="keywords" content="3yx卧龙吟,卧龙吟官网,官方卧龙吟,卧龙吟,网页游戏,三国网游,策略游戏,三国游戏,卧龙吟攻略,卧龙吟金币,人最多的卧龙吟" />
		<link href="/css/login.css" rel="stylesheet" type="text/css" />
		<script src="js/jquery.js" type="text/javascript"></script>
		 
		<script type="text/javascript">
			function CheckLogin() {
				var username=$("#username").val();
				if (username == "") {
					alert("请输入用户名!");
					$("#username").focus();
					return false;
				}
				var pswd=$("#pswd").val();
				if (pswd=="") {
					alert("密码不能为空!");
					$("#pswd").focus();
					return false;
				}
				$("#form1").submit();
			}
			function AddFavorite(sURL, sTitle){
				try{
					 window.external.addFavorite(sURL, sTitle);
			    }
			    catch (e) {
			        try {
			            window.sidebar.addPanel(sTitle, sURL, "");
			        }
			        catch (e){
			            alert("加入收藏失败,请使用Ctrl+D进行添加");
			        }
			    }
			}
			$(document).ready(function ()
			{
				if($.trim("") != "")
				{
					alert("用户名或密码错误");
					window.location.href="http://www.wolongyin.com:80/loginGame.jsp?sid="+$("#sid").val(); 
				}
				if($.trim("") != "")
				{
					$("#sid").val('');
				}
			});
			$(document).keypress(function(e){if(e.keyCode==13){CheckLogin();}});
		</script>
	</head>
	<body>
	<form id="form1" name="form1" action="checkGameLogin.xhtml;jsessionid=54218ABEA8C930D39F5A91F0C5E566C9.tomcat1" method="post">
<table class="wwFormTable">
	<input name="sid" id="sid" type="hidden" value="1002"/>
	<input type="hidden" name="struts.token.name" value="struts.token" />
<input type="hidden" name="struts.token" value="NM1L6FX1ZVV8LKHQBKPAQOSEZHK3DQVK" />
		<div class="warp">
			<div class="login_l">
				<div class="l01"></div>
				<div class="l02"></div>
				<div class="l03"></div>
				<div class="l04"></div>
				<div class="l05"></div>
				<div class="l06"></div>
			</div>
			<div class="login_r">
					<div class="r01"></div>
					<div class="r02"></div>
					<div class="r03"></div>
					<div class="r04"></div>
					<div class="r05">
						<div class="clear"></div>
						<div class="login_box">
							<br />
							<input type="hidden" name="act" value="login" />
							<p>
								<label for="username">
									用户名:
								</label>
								<input type="text" name="username" id="username" class="t_input" value="" maxlength="26"/>
							</p>
							<p>
								<label for="password">
									密  码:
								</label>
								<input type="password" name="password" id="pswd" class="t_input" value="" maxlength="26"/>
							</p>
						</div>
					</div>
					<div class="r06">
						<div class="clear"></div>
						<div class="login_box3">
							<p>
								<input type="button" class="loginbtn" value="" onclick="return CheckLogin();" />
								<a href="http://www.youxila.com/recharge/toChooseRechargeManner.xhtml?gameid=1" class="paybtn" target="_blank"></a>
							</p>
						</div>
					</div>
					<div class="r07">
						<div class="clear"></div>
						<div class="login_box2"> 
							<p>
								<a href="/" target="_blank">官方网站</a> |
								<a href="http://www.youxila.com/page/front/regWly.jsp" target="_blank">帐号注册</a> |
								<a href="http://www.youxila.com/page/front/person/person_repassword_1.jsp" target="_blank">找回密码</a>
								|
								<a  onclick="AddFavorite(window.location,document.title)" >加入收藏</a>
							</p>
						</div>
					</div>
					<div class="r08"></div>
				
			</div>
			
			<div class="clear"></div>
			<div class="tips">
				玩法多样的战争策略,属性随机的神兵利器,彼此克制的各系兵种,纯正绿色的页游模式让您体验最纯粹的史诗级战争三国题材游戏巨作。
				<br />
				抵制不良游戏,拒绝盗版游戏。注意自我保护,谨防受骗上当。适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。 
				<br />
				<a href="http://www.3yx.com" target="_blank">3YX(上游戏服务网)</a> 为您呈上好游戏 卧龙吟 
				<br />
				Copyright © 3YX卧龙吟 版权所有 
			</div>
		</div>
		</table></form>




	</body>
</html>
whj_hbxf 2013-07-11
  • 打赏
  • 举报
回复
引用 10 楼 u011096386 的回复:
string str="<input type=\"hidden\" name=\"struts.token.name\" value=\"123456\"/>";
        string result = "";
        string flagstr = "name=\"struts.token.name\" value=\"";
        int beginIndex = str.IndexOf(flagstr);
        if (beginIndex > -1)
        {  
           int endIndex=str.IndexOf("\"/>",beginIndex);
           result = str.Substring(beginIndex + flagstr.Length, endIndex - beginIndex -flagstr.Length);
        }
        
这是字符串截取的方法 建议使用正则
谢谢回答!我本来也是这样做的,但就是截取出来的不对。str是服务器返回的HTML代码,里面有其它隐藏控件。这样吧,我把HTML代码帖出来,麻烦你帮忙看看。
ztszhq 2013-07-11
  • 打赏
  • 举报
回复
string str="<input type=\"hidden\" name=\"struts.token.name\" value=\"123456\"/>";
        string result = "";
        string flagstr = "name=\"struts.token.name\" value=\"";
        int beginIndex = str.IndexOf(flagstr);
        if (beginIndex > -1)
        {  
           int endIndex=str.IndexOf("\"/>",beginIndex);
           result = str.Substring(beginIndex + flagstr.Length, endIndex - beginIndex -flagstr.Length);
        }
        
这是字符串截取的方法 建议使用正则
whj_hbxf 2013-07-11
  • 打赏
  • 举报
回复
引用 3 楼 UR_Not_Alone 的回复:
如果前面的都是固定的话,用string.replace将除了“xxx”之外的部分替换成空就ok了
这个思路也想过,但是我不知道该怎么在HTML代码中找到input type="hidden" name="struts.token.name value="xxxxxxxxxxx这个控件。在这个控件前后都有同样的隐藏控件保存着变量,每次请求返回的变量值都不同。
  • 打赏
  • 举报
回复
HtmlDocument来操作应该是最快的.
shawn_yang 2013-07-11
  • 打赏
  • 举报
回复
引用 5 楼 whj_hbxf 的回复:
[quote=引用 1 楼 shawn_yang 的回复:] (?<=value=")[^"]*(?=")
在这个HTML代码中有好几个类似的隐藏控件呢。[/quote] (?<=<input\s*type="hidden"\s*name="struts\.token\.name"\s*value=")[^"]*(?=")
shawn_yang 2013-07-11
  • 打赏
  • 举报
回复
这个工具是用来验证正则表达式的 C#本身就支持正则表达式
whj_hbxf 2013-07-11
  • 打赏
  • 举报
回复
引用 1 楼 shawn_yang 的回复:
(?<=value=")[^"]*(?=")
在这个HTML代码中有好几个类似的隐藏控件呢。
_小黑_ 2013-07-11
  • 打赏
  • 举报
回复
引用 1 楼 shawn_yang 的回复:
(?<=value=")[^"]*(?=")
这个工具怎么用啊? 自己动手写正则??
夜轻风 2013-07-11
  • 打赏
  • 举报
回复
如果前面的都是固定的话,用string.replace将除了“xxx”之外的部分替换成空就ok了
shawn_yang 2013-07-11
  • 打赏
  • 举报
回复
忘了说了,这是正则表达式
shawn_yang 2013-07-11
  • 打赏
  • 举报
回复
(?<=value=")[^"]*(?=")

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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