第1个回答 2009-10-10
楼上的同志们说的都有道理,你可以不这样处理字符串,可以把字符串变成一个个的字符数组来处理。String自带toCharArray()方法,可以自行转换,这样处理起来可以得心应手。
其实在做Java编程的时候,不要啃住一个骨头不放,方法是灵活的,思路更是灵活的,实际情况也是多变的。就像你说的一个长达几万字符的截取,就不会再用String去做了,这样不仅没有效率,而且你会发现程序冗长无力。实际上,没有人会去做截取这么长的字符串工作。
多多看高人写的程序,提高会很快的~
祝你成功~
第2个回答 2009-10-12
字符编码不同,一个汉字的字节数可能会有不同,所以实现这个程序困难不小。
比如,UTF8 and UTF16编码的字符字节数不是相同的。
实在看不出楼主的用意,假如你取到的第10000个字节刚好是中文字符编码的低位,转变成中文不就乱码了?又或是三字节的,你刚好取到两字节,这又会是乱码。
算了,我也不F话了,直接上java.nio.ByteBuffer+java.nio.channels.Channel来处理吧。
这个超快,不会找DOC。
附:
如果你愿意快速处理字符串,建议用StringBuffer来处理,在处理超大字符串时,程序会有意想不到的速度提升。 过百万字节的字符串如过用String.substring()来处理是超慢的。呵呵
第3个回答 2009-10-10
字符串有截取方法呀。。。。。
字符长度受你内存大小的影响~~~
String str="abc...";这样定义的字符串是存在字符串池中的
String str=new String("abc...")这样定义的字符串是在堆内存中的,然后 被栈内存的对象str引用
所以字符串是对象,是在内存中存储的,不像基本数据类型有各自的长度,字符串应该是只要是内存不满,是没有长度限制的
substring方法
String a="awdadadada342342424242424242424242";
String first10000=a.substring(0,9999);
String end10000=a.substring(a.length-9999);
希望能帮到你!!
第4个回答 2009-10-10
public class Tools {
public Tools() {
}
/**
* 字符串按字节截取
* @param str 原字符
* @param len 截取长度
* @return String
* @author kinglong
* @since 2006.07.20
*/
public static String splitString(String str, int len) {
return splitString(str, len, "...");
}
/**
* 字符串按字节截取
* @param str 原字符
* @param len 截取长度
* @param elide 省略符
* @return String
* @author kinglong
* @since 2006.07.20
*/
public static String splitString(String str,int len,String elide) {
if (str == null) {
return "";
}
byte[] strByte = str.getBytes();
int strLen = strByte.length;
int elideLen = (elide.trim().length() == 0) ? 0 : elide.getBytes().length;
if (len >= strLen || len < 1) {
return str;
}
if (len - elideLen > 0) {
len = len - elideLen;
}
int count = 0;
for (int i = 0; i < len; i++) {
int value = (int) strByte[i];
if (value < 0) {
count++;
}
}
if (count % 2 != 0) {
len = (len == 1) ? len + 1 : len - 1;
}
return new String(strByte, 0, len) + elide.trim();
}
}