Dois métodos de java interceptando caracteres especificados em uma string (pegue o tipo de imagem base64 como exemplo)

Primeiro lance as seguintes perguntas:

        O front-end passou uma imagem do tipo base64 para o back-end, então como faço para obter o tipo dessa imagem no back-end? É imagem/gif ou imagem/jpeg ou imagem/png? Neste momento, é claro que você pode converter a imagem do tipo base64 em um tipo de arquivo ou um tipo de byte no back-end e, em seguida, chamar o método interno java para obter o tipo de arquivo, mas essa não é a maneira mais fácil. é um método simples e bruto: use a interceptação A maneira de especificar o personagem para obter o tipo de imagem.

Suponha que a string base64 passada do front-end para o back-end seja:

data:image/jpeg;base64,R0lGODlhHAAmAKIHAKqqqsvLy0hISObm5vf394uLiwAAA=

Obviamente, a primeira metade desta string já abrange o tipo de arquivo (a parte entre os dois pontos e o ponto e vírgula), só precisamos interceptá-lo, o código é o seguinte:

Método 1. Use o índice de substring

String base64File= "data:image/jpeg;base64,R0lGODlhHAAmAKIHAKqqqsvLy0hISObm5vf394uLiwAAA=";
int beginIndex = base64File.indexOf(":");  //开始截取的索引值
System.out.println("开始截取的索引值为:" + beginIndex);
int endIndex = base64File.indexOf(";");    //结束截取的索引值
System.out.println("结束截取的索引值为:" + endIndex);
String fileType = base64File.substring(beginIndex + 1, endIndex);  //开始截取的索引值需加 1 ,因为 substring 方法取头不取尾
System.out.println("图片类型为:" + fileType);
if(!"image/jpeg".equals(fileType)) {
    return "图片类型有误,请重传!"
}

O resultado da operação é o seguinte:

Nota : O código acima não pode ser escrito da seguinte forma:

String base64File= "data:image/jpeg;base64,R0lGODlhHAAmAKIHAKqqqsvLy0hISObm5vf394uLiwAAA=";
String fileType = base64File.substring(5, 15); 
System.out.println("图片类型为:" + fileType);

 beginIndex e endIndex não podem ser gravados até a morte, porque o tipo de imagem não é necessariamente 10 dígitos, se o tipo de imagem for image/png (9 dígitos), o resultado do código acima será "image/png;" com um ponto e vírgula no final está errado.

Método 2, usando expressões regulares

String base64File ="data:image/jpeg;base64,R0lGODlhHAAmAKIHAKqqqsvLy0hISObm5vf394uLiwAAA=";
Pattern pattern = Pattern.compile("(?<=:)[\\s\\S]*(?=;)");  //冒号和分号之间的任意字符
Matcher matcher = pattern.matcher(base64File);
if(matcher.find()) {
    System.out.println("截取的字符串为:" + matcher.group());
}

O resultado da operação é o seguinte:

Acho que você gosta

Origin blog.csdn.net/liu__yuan/article/details/131856379
Recomendado
Clasificación