Dos métodos de java para interceptar caracteres específicos en una cadena (tome el tipo de imagen base64 como ejemplo)

Primero lanza las siguientes preguntas:

        El front-end ha pasado una imagen de tipo base64 al back-end, entonces, ¿cómo obtengo el tipo de esta imagen en el back-end? ¿Es imagen/gif o imagen/jpeg o imagen/png? En este momento, por supuesto, puede convertir la imagen de tipo base64 en un tipo de archivo o un tipo de byte en el backend, y luego llamar al método incorporado de Java para obtener el tipo de archivo, pero esta no es la forma más fácil. es un método simple y crudo: use la intercepción La forma de especificar el carácter para obtener el tipo de imagen.

Supongamos que la cadena base64 que se pasa del extremo frontal al extremo posterior es:

datos:imagen/jpeg;base64,R0lGODlhHAAmAKIHAKqqqsvLy0hISObm5vf394uLiwAAA=

Obviamente, la primera mitad de esta cadena ya cubre el tipo de archivo (la parte entre los dos puntos y el punto y coma), solo necesitamos interceptarlo, el código es el siguiente:

Método 1. Usar índice de subcadena

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 "图片类型有误,请重传!"
}

El resultado de la operación es el siguiente:

Nota : el código anterior no se puede escribir de la siguiente manera:

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

 beginIndex y endIndex no se pueden escribir hasta la muerte, porque el tipo de imagen no es necesariamente de 10 dígitos, si el tipo de imagen es imagen/png (9 dígitos), entonces el resultado del código anterior será "imagen/png;" con un punto y coma al final esta mal.

Método 2, usando expresiones 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());
}

El resultado de la operación es el siguiente:

Supongo que te gusta

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