JAVA中:中英文混合的字符串按字节截取问题

现有一个很长中的英文混合的字符串(假如个数有两千万),怎么高效率的取左边10000个或者50000个字节的字符串?

如果一个一个取出再算长度实在太慢了。

我的QQ是 272867141 昵称是:浪迹天涯
String str="a中c国d人w";
str.subString(0,3);这个方法是按个数截取的,不是按字节截取的。

可以写个小的算法,每次取这个范围内的字符判断,然后再取一半根据大小判断.
比如:10000个可以先用substring截7500个字符(最少5000,最多10000,取一半),然后根据字节数大小,再按一半的方式进行截(如果比10000字节少,就取5000-7500中间的 ,如果多,就取7500-10000),依次类推就可以了,直到取得结果.

这样应该是次数最少的了
温馨提示:内容为网友见解,仅供参考
第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();
}
}

JAVA中:中英文混合的字符串按字节截取问题
比如:10000个可以先用substring截7500个字符(最少5000,最多10000,取一半),然后根据字节数大小,再按一半的方式进行截(如果比10000字节少,就取5000-7500中间的 ,如果多,就取7500-10000),依次类推就可以了,直到取得结果.这样应该是次数最少的了 ...

java 如何对中英文和符号数字混合的字符串进行截取,其中包含各种括号...
public static String subString(String str, int length) { if (str.length() <= 8)return str;String tempStr = str.substring(0, 6);int left = tempStr.indexOf("(");int right = tempStr.indexOf(")");if (left < 0 && right >= 0) { return tempStr + "...";} int num ...

java字符串字节长度截取问题
\/\/ 原始字符串 String s = "我ZWR爱JAVA";System.out.println("原始字符串:" + s);try { System.out.println("截取前1位:" + CutString.substring(s, 1));System.out.println("截取前2位:" + CutString.substring(s, 2));System.out.println("截取前4位:" + CutString.substring...

求截取带中文的字符串的java方法。
public Test(){ String str="ABCDE";String str2="ABC你D";String str3="A你B好C吗勇DE";System.out.println("1 str='ABCDE' start=1 end=5 结果:"+getSubString(str,1,5));System.out.println("2 str='ABCDE' start=1 end=4 结果:"+getSubString(str,1,4));System.out.printl...

java中如何截取字符串中的指定一部分
首先,**String类的substring(int start)** 方法接受一个整数参数,即开始截取的位置索引。例如,对于字符串 "hello world!",`str.substring(1)` 会返回 "ello world",而 `str.substring(3)` 则是 "lo world!"。需要注意的是,如果start值大于字符串长度,将抛出越界异常。第二种方法是 **...

java中字符串的截取和分隔
Java语言中,String类提供substring()方法进行字符串截取和split()方法进行字符串分割。substring()方法用于获取字符串的一部分。通过指定开始和结束索引,可以截取指定范围内的字符。如果只指定一个参数,则从该位置开始截取至字符串末尾。例如:字符串"羽毛球-篮球-乒乓球",执行str.substring(4)获取从第5...

java中获取含中文的字符串长度
public class SplitTest {public static void main(String[] args) {String s="abc,大家好abc才是真的好abc";s = s.replaceAll("[^(\\\一-\\\龥)]", "");System.out.println(s+"\\t长度="+s.length());}}

JAVA中如何在指定字符串中提取某段字符?
byte[]类型的。\/\/xxxxxxxxxxx \/\/ 这里我想取buffer里面的一段内容,这里怎么写啊?String toStr = new String(buffer);\/\/字节数组转化成字符串 String newStr = toStr.subString(startIndex,endIndex);\/\/截取你所要的部分 }catch(Exception e){ e.printStackTrace(); } ...

java截取指定字符串中的某段字符如何实现?
用substring函数可以实现截取字符串。代码如下:publicclasswoo{ publicstaticvoidmain(Stringargs[]){ Stringstr="房估字(2014)第YPQD0006号";System.out.println(str.substring(10,18));} }

java分割字符串中的汉字和数字问题
import java.util.regex.*;public class test { public static void main( String[] args ) { String s = "字符串123456哈哈441";Pattern p = Pattern.compile("[\\\一-\\\龥]+|\\\\d+");Matcher m = p.matcher( s );while ( m.find() ) { System.out.println( m.group() )...

相似回答