java 按字节截取字符串问题 20

我要解析一个很长的字符串按照字节长度截取,例如bSubString(Stringmsg,intbegin,intend),返回我要截取的那段这个字符串我要截取很多次包括空... 我要解析一个很长的字符串 按照字节长度截取 ,例如bSubString(String msg,int begin,int end), 返回我要截取的那段 这个字符串我要截取很多次 包括空格 我要得到bsubstring(msg,1,9) bsubstring(msg,10,29)这样的 求高手帮忙 最好测试了再回答 回答的号还加分 比较急
一个字符串 字节的长度和位置指定了,包括汉字,我要解析这个字符串 把整个字符串截取成小字符串,我就要调用bsubstring(str,50,400)这样的 按照字节 问题描述比较清楚吧 我这字符串就几千个字节 不考虑运行速度啊 内存那些问题
展开
 我来答
以拟开7956
2010-08-10 · TA获得超过209个赞
知道答主
回答量:117
采纳率:0%
帮助的人:127万
展开全部
public class FormatTool {
/**
*
*
* @param
* @return String
* @param formatStr
* 被格式化字符串
* @param tag
* 不足位补充字符串
* @param len
* 字符串长度
* @param direction
* 1:左补,0:右补
* @return desc
*/
public static String format(Object formatStr, String tag, int len,
int direction) {
String str = formatStr.toString();
if (len <= str.length()) {
return str.substring(0, len);
}
StringBuilder tempStr = new StringBuilder();
for (int i = 0; i < len - str.getBytes().length; i++) {
tempStr.append(tag);
}
if (direction == 0) {
return str + tempStr;
} else {
return tempStr.append(formatStr).toString();
}
}

/**
* 字节数组拷贝
*
* @param
* @return void
* @param fromBytes
* @param toBytes
* @param from
* @param len
* desc
*/
public static void cpyBytes(byte[] fromBytes, byte[] toBytes, int from,
int len) {
for (int i = from; i < from + len; i++) {
toBytes[i - from] = fromBytes[i];
}
}

/**
* 获取字符串formatStr从from到from + len的字符串
*
* @param
* @return String
* @param formatStr
* @param from
* @param len
* @return
* desc
*/
public static String format(String formatStr, int from, int len) {
byte[] fromBytes = formatStr.getBytes();
byte[] toBytes = new byte[len];
cpyBytes(fromBytes, toBytes, from, len);
return new String(toBytes);
}
}
使用方法FormatTool.format(str,50,400);表示的意思就是截取str字符串从第50个字节开始截取,截取400个字节的字符串
craighit
2010-08-10 · TA获得超过154个赞
知道答主
回答量:35
采纳率:0%
帮助的人:32.2万
展开全部
关于你的问题的问题:1. 到底按字节截还是字符截?按字节的话必须先将字符串转为byte array 2.很长是多长,多次是多少次?现在计算机的内存及计算能力你不要低估了,在一个普通的笔记本上,对于10M长的字符串,进行1百万次随机位置的substring,不到1秒。3.如果真是很长很多次,那你要对你substring的顺利研究下,看能不能尽量挨着访问,从内存访问(缺页)方面来提高一点速度,不过这需求确实确实好难见。
试试下面程序的运行速度吧:
import java.util.*;

public class Study {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println(System.currentTimeMillis());
for(int i = 0; i < 1000000; i++){
sb.append("1234567890");
}
System.out.println(System.currentTimeMillis());
String str = sb.toString();
Random rand = new Random();
for(int i = 0; i < 1000000; i++){
int beg = rand.nextInt(5000000);
int end = rand.nextInt(5000000)+beg;
str.substring(beg, end);
}
System.out.println(System.currentTimeMillis());
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梅西之巅
2010-08-10
知道答主
回答量:29
采纳率:0%
帮助的人:21万
展开全部
我给你思路
你可以参考replace方法得到 网上很多自写的replace 你定位地址可以用indexof方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd周述兵
2010-08-10 · TA获得超过350个赞
知道答主
回答量:135
采纳率:0%
帮助的人:0
展开全部
static String bSubString(String msg, int begin, int end) {
return msg.substring(begin, begin + end);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式