byte[] b = new byte[100];
String str = "字符串测试";
System.arraycopy(str.getBytes(), 0, b, 0, str.getBytes().length);问题是:如果我获取到了类似b这么一个数组,我该怎样把里面的字符串取出来,而不要后面多余的空字节注:上面的代码只是模拟一下这个字节数组的内容,字符串的实际长度是未知的
String str = "字符串测试";
System.arraycopy(str.getBytes(), 0, b, 0, str.getBytes().length);问题是:如果我获取到了类似b这么一个数组,我该怎样把里面的字符串取出来,而不要后面多余的空字节注:上面的代码只是模拟一下这个字节数组的内容,字符串的实际长度是未知的
解决方案 »
- 关于正则获取多个数据!!!!!!
- 文本编辑器中undo,redo如何使用
- java正则表达式 反斜杠问题
- 关于ireport第2天问题
- mysql4.1.x中使用utf8编码中文乱码问题
- 读文件绝对路径和相对路径问题
- 一个初学者的问题
- wls 7中关于word的问题
- 各位请帮忙啊!下面的程序为什么老是出现"符号:类 AbstractTableModel 位置:类 in Demo TableModel tm=new AbstractTableModel()"的错误啊
- 初学java 为什么读取文件中内容时要用while语句进行循环读取
- 求助eclipse下写的时候没有出错,但是运行就报错
- nsis如何调用C写的DLL?
String retStr = new String(b);
String retStr = new String(b);
你打印一下这个字符串的长度看看,95, 并不是我想要的字符串长度为5的
byte[] bs = str.getBytes();
int p = 0;
for (int i = 0; i < bs.length; i++) {
if (bs[i] == 0) {
p = i;
break;
}
}
byte[] b = new byte[p];
System.arraycopy(bs, 0, b, 0, b.length);
return new String(b);
}不知道有没有效率高一点的办法
String str= new String(b);
str.substring(str.indexOf(' '));
String str= new String(b);
str.substring(int beginIndex,str.indexOf(' ')).
空字节不是空格,它总是一个字符吧?总不会是什么都没有吧?如果是什么都没有的话,那你的length=95是哪来的?你找到它是什么字符不就完了么?
关键这个问题是去掉多余的空字节,概念不要弄混了byte[] b = byte[100];
这样默认的所有字节初始化为0,
String str = "字符串测试";
System.arraycopy(str.getBytes(), 0, b, 0, str.getBytes().length);
加了这句之后,只是填充了前面10个字节,后面的仍为0,new String(str)之后,后面的0字节并不是空格,这要弄清楚
str.substring(0,str.indexOf(' ')).
String retStr = new String(b);
String str1=retStr.trim();//直接去掉它后面的空格
System.out.println(str1.length());呵呵。投机了一点
public class CSDN { public static void main(String[] args) {
byte[] b = new byte[100];
String str = "字符串测试";
System.arraycopy(str.getBytes(), 0, b, 0, str.getBytes().length);
String tmp = new String(b);
System.out.println(tmp.substring(0,tmp.indexOf("\0"))); }
}
public static void main(String[] args){
String str = "字符串测试";
byte[] bt1 = str.getBytes();
System.out.println(bt1.length); // 这里打印15
byte[] bt2 = new byte[100];
for(int i = 0;i<15;i++){
bt2[i] = bt1[i];
}
byte[] bt3 = {0,0,0};
String sign = new String(bt3);//[0,0,0]这三个byte组成什么字符
String rs = new String(bt2);
rs = rs.substring(0, rs.indexOf(sign));//这是最后的结果
System.out.println(rs.length());
System.out.println(rs);
}
然后用三个0作为标志,去分割字符串:
rs = rs.substring(0, rs.indexOf(sign));
这有什么难的呢。你要将那个十分重要的数据:
System.arraycopy(str.getBytes(), 0, b, 0, str.getBytes().length);
中的str.getBytes().length利用起来啊。因为:你都已拷贝过来了。楼主不要告诉我们说:System.arraycopy(...)也不知道,就知道一个byte[] b;里面放在东西,支找吧。这样子的话,没有其它信息,是无法解决问题的。
还有其它什么信息可用?若真的就知道一个byte[] b;里面放在东西,支找吧。这样子的话,就只能从b的尾部向前找到第一个字节值不为0的,就认为是最后一个数据了。你总得要有一点信息让人利用来判别吧。
* 这样就数组中就不会有多余的内容了String str = "字符串测试";
byte[] b = new byte[str.getBytes().length];
System.arraycopy(str.getBytes(), 0, b, 0, str.getBytes().length);
String temp = new String(b);
System.out.println(temp + ":");
int getByteLength(byte[] res) {
int len = 0;
for (int pos = 0; pos < res.length; pos++) {
if (res[pos] != 0) {
len++;
} else {
break;
}
}
return len;
}