日期:2014-05-18  浏览次数:20656 次

高分求一个关于循环取内容的问题!
从服务器返回一个大字符串,例如:String   str   =   "00000008abcdabcd00000012aabbccddeeff00000007aabbccd00000001a00000003aaa ";

从一开始第一个到第8个,00000008,表示后面跟着的字段有8位,取出来abcdabcd,然后再继续,取8个,是00000012,表示后面跟着的字段有12位,取出来为   aabbccddeeff,以此类推

小弟用的最笨的办法,substring,从第一个取到第8个,然后再根据里面的数字,再排着从第9位,取出   8个,得到   abcdabcd

不知道各位大侠,有什么更好的办法?

------解决方案--------------------
你要能保证字符中的数据不能有8位连续的数字
<%
String s= "00000008abcdabcd00000012aabbccddeeff00000007aabbccd00000001a00000003aaa ";
String ss[] =s.split( "[0-9]{8} ");
for(int i=0;i <ss.length;i++)
{
out.println(ss[i]+ " <br> ");
}
%>
------解决方案--------------------
import java.util.Vector;

public class TestStringSub {

public static final int DATA_SIZE_LENGTH = 8;

public TestStringSub() {

super();
}

public String getData(byte[] allData, int offset, int length) {

return new String(allData, offset, length);
}

public int getDataLength(byte[] allData, int offset) {

return Integer.parseInt(getData(allData, offset, DATA_SIZE_LENGTH));
}

public Vector getData(byte[] allData) {

Vector data = new Vector();
int offset = 0;
String one = " ";
int dataLength = 0;
while (offset != allData.length) {
dataLength = getDataLength(allData, offset);
offset = offset + DATA_SIZE_LENGTH;
one = getData(allData, offset, dataLength);
data.add(one);
offset = offset + dataLength;
}

return data;
}

/**
* @param args
*/
public static void main(String[] args) {

TestStringSub test = new TestStringSub();
String s = "00000036http://www.sina.com/80/36/75/aaa.htm000000064520MB00000022反反复复反反复复凤飞飞000000162006-01-10 18:4700000036http://www.sohu.com/80/36/75/aaa.htm00000000000000064520MB00000022sg0318@BTPIG&amp;BTGOD ";
byte[] allData = s.getBytes();
Vector data = test.getData(allData);
}

}

------解决方案--------------------
<SCRIPT LANGUAGE= "JavaScript ">
<!--
var str= "00000008abcdabcd00000012aabbccddeeff00000007aabbccd00000001a00000003aaa ";
//求出所有的数字的正则
var reg=/\d+/g;
//求出所有非0的正则
var reg1=/[^0]/g;
//得到字符串中数字的数组
var newArray=str.match(reg);
//设定字符串的参数
var wuxin= " ";
//设定当前游标的位置
var curLentght=0;
//把刚才求出的数组循环分别得到里面的字符串
for(var i=0;i <newArray.length;i++){
//求出截取字符串的开始为知当前游标的位置curLentght+数组中的项目的长度为开始位置
var start=curLentght+newArray[i].length;
//得到项目中不是0的数它返回的是个数组
var newString=newArray[i].match(reg1);
//把数组转化成字符串然后替换掉","就能组成代表个数的数字;
var pos=newString.toString().replace( ", ", " ");
//这里把上面的字符串转化成Int类型
var num=parseInt(pos);
//截取字符串的结束位置当前游标curLentght+项目的长度+我们要截取的长度
var end =parseInt(curLentght)+newArray[i].length+num;
//截取字符串
wuxin =str.substring(start,end)
//输出字符串
alert( "当前的字符串的个数是: "+num+ "个,字符串是: "+wuxin)
//然后让当前的游标位置等于我们截取后的位置
curLentght =end;
//循环截取
}
//-->
</SCRIPT>
------解决方案--------------------