如何从字符串中删除??

时间:2014-03-09 13:49:11

标签: java string character-encoding bufferedreader

char 是什么?以及如何从String中删除它?我是从BufferedReader得到的,我得到了它,因为我读取了一个char数组中的内容,这个数组必须分配给一个特定的大小。所以,我得到的字符串就像那个"aaaaaaa����",我尝试了trimsubString,但没有改变任何内容:

 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;

5 个答案:

答案 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,替换那些不是“”

的字符