Java 从字符数组中删除所有空元素
我有一个一次最多可以容纳50000个字符的字符数组。此数组的内容通过套接字连接发送。但是,不能保证此字符缓冲区不会有任何空元素。然后我需要将这个字符数组转换成一个字符串(例如,新字符串(缓冲区);)。我的问题是,每当我从套接字接收到长度不超过50000的缓冲区时,如何从这个字符数组或字符串中删除剩余的或空的元素?如果没有,你建议的最有效的方法是什么 /下面是当前的实现/ //////这是一个使用ByteArrayOutputStream的实现Java 从字符数组中删除所有空元素,java,sockets,Java,Sockets,我有一个一次最多可以容纳50000个字符的字符数组。此数组的内容通过套接字连接发送。但是,不能保证此字符缓冲区不会有任何空元素。然后我需要将这个字符数组转换成一个字符串(例如,新字符串(缓冲区);)。我的问题是,每当我从套接字接收到长度不超过50000的缓冲区时,如何从这个字符数组或字符串中删除剩余的或空的元素?如果没有,你建议的最有效的方法是什么 /下面是当前的实现/ //////这是一个使用ByteArrayOutputStream的实现 public String readAuth() t
public String readAuth() throws IOException {
int s;
ByteArrayOutputStream bao = new ByteArrayOutputStream();
while ((s = is.read()) != -1) {
bao.write(s);
if (!is.ready())
break;
}
if (s == -1) {
return null;
}
String result = bao.toString();
return result;
}
当我需要读取大量数据时,这个实现非常慢
-----------------编辑
(例如,服务器向我发送数据,但它可能并不总是50000长字节,而是32822长字节,然后我需要删除剩余的数组元素)
或
改用数组列表!这将允许您删除数组元素,而标准数组包没有“简单”的方法
ArrayList缓冲区=新的ArrayList(50000)
buffer.add(x)
缓冲区。删除(x)
注意:在ArrayList上实例化一个类型,类似的方法也可以:
public String readBufferUpdate() throws IOException {
char[] buffer =new char[50000];
is.read(buffer);
return new String(ArrayUtils.removeElements(buffer, ''));
}
文件在此:
我建议将数组转换为字符串,并使用replaceAll和trim函数删除空元素
String bufferString = new String(buffer).trim().replaceAll(" ", "");
这不需要任何附加库。从缓冲区中的
输入流
读取的正确方法如下
public String readBufferUpdate() throws IOException {
char[] buffer =new char[50000];
int bytesRead = is.read(buffer, 0, buffer.length);
return new String(buffer, 0, bytesRead);
}
在这里,您可以
is.read()
返回已读入bytesRead
的字节数。只有这么多字节从缓冲区复制到字符串为什么要将其读入数组,直接读入字符串?我无法使用.readLine()函数实现此目的。我必须使用is.read()并将内容分配给数组。使用replaceAll方法会使trim方法多余。顺便说一句,它不会使trim方法多余-从replaceAll将从char[]内部移除的末端移除trim。
public String readBufferUpdate() throws IOException {
char[] buffer =new char[50000];
is.read(buffer);
return new String(ArrayUtils.removeElements(buffer, ''));
}
String bufferString = new String(buffer).trim().replaceAll(" ", "");
public String readBufferUpdate() throws IOException {
char[] buffer =new char[50000];
int bytesRead = is.read(buffer, 0, buffer.length);
return new String(buffer, 0, bytesRead);
}