java截取字符串中的指定字符的两种方法(以base64图片为例)

 更新时间:2023年08月08日 10:23:17   作者:【金融科技蚂蚁】  
本文介绍了使用Java截取字符串中指定字符的方法,通过substring索引和正则实现,文章详细介绍了实现步骤和示例代码,对于想要了解如何使用Java截取字符串指定字符的读者具有一定的参考价值

首先抛出如下问题:

前端传了一个 base64 类型的图片给后端,那么我后端要怎么获取这个图片的类型呢?是 image /gif 还是 image/jpeg 亦或是 image/png ?这个时候你当然可以在后端将 base64 类型的图片转化为 File 类型或者 byte 类型,然后调用 java 内置的获取文件类型的方法即可,但这不是最简便的, 下面介绍简单粗暴的方法:利用截取指定字符的方式去获取图片类型。

假设前端传给后端的 base64 字符串为:

data:image/jpeg;base64,R0lGODlhHAAmAKIHAKqqqsvLy0hISObm5vf394uLiwAAA=

显然这个字符串前半部分已经涵盖了文件类型(位于冒号和分号之间的部分),我们只需要将其截取出来即可,代码如下:

方法一、使用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 "图片类型有误,请重传!"
}

运行结果如下:

注意:上述代码不可写成如下形式:

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

 beginIndex 和 endIndex 不能写死,因为图片类型不一定是 10 位的,如果图片类型是 image/png(9位的),那么上述代码的结果将是 "image/png;" ,尾巴多了一个分号是错误的。

方法二、使用正则表达式

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());
}

运行结果如下:

到此这篇关于java截取字符串中的指定字符的两种方法(以base64图片为例)的文章就介绍到这了,更多相关java截取字符串指定字符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot热部署实现原理及实例详解

    Springboot热部署实现原理及实例详解

    这篇文章主要介绍了Springboot热部署实现原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • java基础-数组扩容详解

    java基础-数组扩容详解

    这篇文章主要介绍了Java数组扩容实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • Java AWT中常用的三种布局管理器详解

    Java AWT中常用的三种布局管理器详解

    这篇文章主要介绍了Java AWT中常用的三种布局管理器详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • hibernate 三种状态的转换

    hibernate 三种状态的转换

    本文主要介绍了hibernate三种状态的转换。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Java使用poi操作excel实例解析

    Java使用poi操作excel实例解析

    这篇文章主要为大家详细介绍了Java使用poi操作excel的简单实例,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • rabbitmq中routingkey的作用说明

    rabbitmq中routingkey的作用说明

    这篇文章主要介绍了rabbitmq中routingkey的作用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java实现银行账户管理子系统

    Java实现银行账户管理子系统

    这篇文章主要为大家详细介绍了Java实现银行账户管理子系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java模拟实现扑克牌洗牌和发牌的示例代码

    Java模拟实现扑克牌洗牌和发牌的示例代码

    这篇文章主要为大家详细介绍了如何利用Java模拟实现扑克牌洗牌和发牌的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-09-09
  • java多线程编程之慎重使用volatile关键字

    java多线程编程之慎重使用volatile关键字

    volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,下面看一下为什么要慎重使用volatile关键字
    2014-01-01
  • Java多线程编程之访问共享对象和数据的方法

    Java多线程编程之访问共享对象和数据的方法

    这篇文章主要介绍了Java多线程编程之访问共享对象和数据的方法,多个线程访问共享对象和数据的方式有两种情况,本文分别给出代码实例,需要的朋友可以参考下
    2015-05-05

最新评论