我要从vCard("*.vcf"文件)中过滤特定容器.我过滤包含子串Photo;的行(如果匹配的话),直到特定的String ==保存在我的imageEncodingString中.不知怎的,我如果想更换的空格imageEncoding有""没有被替换.
"容器"的示例:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
Run Code Online (Sandbox Code Playgroud)
代码段:
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);
}
Run Code Online (Sandbox Code Playgroud)
用""输出:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
Run Code Online (Sandbox Code Playgroud)
用\ s输出:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
Run Code Online (Sandbox Code Playgroud)
应该是什么:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
Run Code Online (Sandbox Code Playgroud)
字符串的行数更长,这只是一个片段.我试图替换,\\s但也没有用.
replaceAll在这里是多余的; 它的第一个参数是正则表达式,你显然不需要它.只需使用.replace,尽管名称,它也取代了所有.
replaceAll(和replace)不修改字符串(java中的字符串是不可变的).他们创造了一个新的.所以imageEncoding.replaceAll(" ", ""),请尝试:imageEncoding = imageEncoding.replace(" ", "")