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)这样的 按照字节 问题描述比较清楚吧 我这字符串就几千个字节 不考虑运行速度啊 内存那些问题 展开
一个字符串 字节的长度和位置指定了,包括汉字,我要解析这个字符串 把整个字符串截取成小字符串,我就要调用bsubstring(str,50,400)这样的 按照字节 问题描述比较清楚吧 我这字符串就几千个字节 不考虑运行速度啊 内存那些问题 展开
展开全部
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个字节的字符串
/**
*
*
* @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个字节的字符串
展开全部
关于你的问题的问题: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());
}
}
试试下面程序的运行速度吧:
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());
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我给你思路
你可以参考replace方法得到 网上很多自写的replace 你定位地址可以用indexof方法
你可以参考replace方法得到 网上很多自写的replace 你定位地址可以用indexof方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static String bSubString(String msg, int begin, int end) {
return msg.substring(begin, begin + end);
}
return msg.substring(begin, begin + end);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询