char �
是什么?以及如何从String中删除它?我是从BufferedReader
得到的,我得到了它,因为我读取了一个char数组中的内容,这个数组必须分配给一个特定的大小。所以,我得到的字符串就像那个"aaaaaaa����"
,我尝试了trim
和subString
,但没有改变任何内容:
String a = "aaaaaaa����";
//subString
int i = a.lastIndexOf("a");
a = a.substring(0, i+1);
//trim
a = a.trim();
这是我阅读输入的方式:
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char[] a = new char[1000];
int line;
String responseLine, server_response = "";
while((line = in.read(a)) != -1) {
responseLine = String.valueOf(a);
server_response = server_response + responseLine;
}
in.close();
return server_response;
答案 0 :(得分:1)
尝试使用unicode
与 对应的Unicode为\ufffd
String str0 = "aaaaaaa����";
System.out.println(str0.replaceAll("\ufffd", ""));
答案 1 :(得分:1)
这很可能是编码问题;您没有在InputStreamReader
上指定编码,因此使用了系统默认值。
尝试并使用:
new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8)
代替。
如果您仍然坚持使用JDK 6,请将StandardCharsets.UTF_8
替换为Charset.forName("UTF-8")
。
如果您不确定在另一端使用了什么编码,则不应使用Reader
,而应将内容读入字节数组。然后,您可以使用CharsetDecoder
尝试将读取的字节映射到一个或多个编码中。
示例:
StandardCharsets.ASCII.newDecoder()
答案 2 :(得分:1)
最后我找到了解决问题的方法,它不是专业的,而是足够有效的。
我只需要在开始char array
之前填充while loop
空格然后在收到整个响应之后我只需修剪它在返回之前:
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char[] a = new char[1000];
int line;
String responseLine, server_response = "";
for(int i = 0; i < a.length; i++){ //
a[i] = ' '; // this is the for loop i added
} //
while((line = in.read(a)) != -1) {
responseLine = String.valueOf(a);
server_response = server_response + responseLine;
for(int i = 0; i < a.length; i++){ //
a[i] = ' '; // this is the for loop i added
} //
}
in.close();
return server_response.trim(); // this is where i return the response trimmed
答案 3 :(得分:0)
System.out.println("aaaaaaa����".replace("�", ""));
剩余字符串为aaaaaaa
。
我建议调查输入源,然后找出为什么你会得到那些字符。可能存在编码问题。
答案 4 :(得分:0)
如果你唯一期望的数字和字符,你可以在字节数组上运行for循环,并在每个字符上运行Char.isLetterOrDigit,替换那些不是“”
的字符