字符串的空白字符不能在Java 8中替换

时间:2019-01-17 16:55:05

标签: java replace

我必须从vCard(“ *。vcf”文件)中过滤特定容器。我过滤包含匹配的子字符串Photo;的行,直到特定的字符串==保存在我的imageEncoding字符串中为止。不知何故,如果我想用imageEncoding替换""的空格,什么也不会替换。

“容器”示例:

PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
 CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==

代码段:

else if(line.contains("PHOTO;")){
                String imageEncoding = line;

                while(true){
                    line = reader.readLine();
                    if (line.contains("==")){
                        imageEncoding = imageEncoding+line;
                        break;
                    }
                    imageEncoding = imageEncoding+line;
                }
                //imageEncoding.replaceAll(" ","");
                imageEncoding.replaceAll("\\s","");
                System.out.println(imageEncoding);

            }

带有“”的输出:

PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
 CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==

带有\ s 的输出:

PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
 CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==

应该是什么:

PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==

该字符串长很多行,这只是一个片段。我试图替换\\s,但还是没用。

2 个答案:

答案 0 :(得分:5)

  1. replaceAll在这里是多余的;它的第一个参数是正则表达式,您显然不需要它。只需使用.replace即可,尽管其名称也可以替换所有内容。

  2. replaceAll(并替换)不修改字符串(Java中的字符串是不可变的)。他们制造了一个新的。因此,请尝试:imageEncoding.replaceAll(" ", "")

  3. ,而不是imageEncoding = imageEncoding.replace(" ", "")

答案 1 :(得分:4)

imageEncoding = imageEncoding.replaceAll(" ","");

字符串在Java中是不可变的。