场景复现

现有一个场景,在处理发票信息时,我们常常会遇到将地址与电话、开户号与账号进行拼接的需求。在 Java 中,最简单的拼接方式是使用 + 运算符,但这种方式在处理 null 值时会产生一些问题。下面我们通过具体示例来详细分析并给出更好的解决方案。

import org.apache.commons.lang3.StringUtils;

public class StringConcatenationExample {
public static void main(String[] args) {
String a = null;
String b = "world";
String c1 = a + b;
String c2 = StringUtils.defaultString(a) + StringUtils.defaultString(b);
System.out.println(c1);
System.out.println(c2);
}
}

打印结果分析

运行上述代码,打印结果如下:

从结果可以看出,当使用 + 运算符直接拼接包含 null 值的字符串时(如 c1),null 会被直接拼接到结果中,这显然不符合我们的预期,而且在实际应用中会让输出看起来很不美观,也不够人性化。
而使用 org.apache.commons.lang3.StringUtils 工具类的 defaultString 方法进行拼接(如 c2),则可以避免这个问题。defaultString 方法会在字符串为 null 时将其替换为空字符串,相当于给字符串设置了默认值。

StringUtils.defaultString 方法原理

StringUtils.defaultString 方法的核心逻辑其实就是判断传入的字符串是否为 null,如果是 null 则返回空字符串,否则返回原字符串。以下是该方法的简化示意:

public static String defaultString(String str) {
return str == null ? "" : str;
}

手动判断的弊端

有些开发者可能会选择在拼接之前手动进行 null 判断,将 null 值替换为空字符串,示例代码如下:

public class ManualCheckExample {
public static void main(String[] args) {
String a = null;
String b = "world";
String result;
if (a == null) {
a = "";
}
if (b == null) {
b = "";
}
result = a + b;
System.out.println(result);
}
}
这种方式虽然也能实现相同的功能,但会使代码变得冗余。尤其是当需要拼接多个字符串时,需要编写大量的 null 判断代码,不仅增加了代码量,还降低了代码的可读性和可维护性。

建议

在编写代码时,我们应该尽量使用官方或自定义的工具类。像 org.apache.commons.lang3.StringUtils 这样的工具类已经经过了大量的测试和优化,能够帮助我们更高效地处理字符串操作,减少代码冗余,同时也让代码的维护变得更加方便。
通过合理利用工具类,我们可以避免重复造轮子,将更多的精力放在业务逻辑的实现上,提高开发效率和代码质量。
综上所述,在处理发票信息拼接这类场景时,推荐使用工具类来处理 null 值,避免直接使用 + 运算符带来的问题。

java字符串拼接遇到null你会处理吗的更多相关文章

  1. 字符串拼接出现null的问题

    最近在开发的过程中遇到这样的问题,原因是在做一个需求的时候,要求将解密的号码和前缀进行拼接.一开始在这个拼接的过程中,没有考虑到数据校验的问题,因为有可能他的前缀或者其他需要拼接的字段在前端传递的过程 ...

  2. Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次

    [请尊重原创版权,如需引用,请注明来源及地址] > 字符串拼接一般使用“+”,但是“+”不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现 ...

  3. 羞,Java 字符串拼接竟然有这么多姿势

    二哥,我今年大二,看你分享的<阿里巴巴 Java 开发手册>上有一段内容说:"循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作 ...

  4. Java 字符串拼接四种方式的性能比较分析

    一.简单介绍 编写代码过程中,使用"+"和"contact"比较普遍,但是它们都不能满足大数据量的处理,一般情况下有一下四种方法处理字符串拼接,如下: 1. 加 ...

  5. Java 字符串拼接 StringBuilder() StringBuffer

            字符串拼接 普通方式 public class StringDemo2 { public static void main(String[] args) { // 表示获取从1970- ...

  6. JAVA字符串拼接操作规则说明

    1.常量与常量的拼接结果在常量池,原理是编译期优化 public void test1() { String s1 = "a" + "b" + "c& ...

  7. java 字符串拼接

    package com.fh.controller.pacm.checkbill; import com.google.common.base.Joiner; /** * 字符串拼接 * * @aut ...

  8. Java 字符串拼接方式

    import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; impor ...

  9. java字符串拼接的几种方式

    1. plus方式 当左右两个量其中有一个为String类型时,用plus方式可将两个量转成字符串并拼接. String a="";int b=0xb;String c=a+b;2 ...

  10. java字符串拼接技巧(StringBuilder使用技巧)

    在平时的开发中,我们可能会遇到需要拼接如下格式的字符串(至少我是遇到了很多次): 1,2,3,4,5,6,7,8,9,10,11,12,12,12,12,34,234,2134,1234,1324,1 ...

随机推荐

  1. ETL与ELT核心技术解析:如何选择最优数据集成方案

    在数字化转型浪潮中,数据集成作为企业数据战略的核心环节,ETL与ELT两种技术路径的抉择直接影响着数据处理效率.本文将通过谷云科技在数据集成领域的实践经验,深入解析两种模式的本质差异与应用场景. 技术 ...

  2. SciTech-Mathematics-Probability+Statistics-CDF vs. PDF: What’s the Difference? PDF:概率密度函数+CDF:累积分布函数-

    https://www.statology.org/cdf-vs-pdf/ CDF vs. PDF: What's the Difference? This tutorial provides a s ...

  3. 高阶篇:1.5)如何选择更好的概念-Pugh矩阵法

    本章目的:系统而有条理地选择更好的概念--pugh矩阵法,有对比就有更好的. 1.前言 在前面的分章中,我们通过各种概念获取的方法获得了很多的初步的概念设计方案. 但这些方案不可能全部实施的. 如何在 ...

  4. 深度技术Win10系统如何破解开机密码的问题

    很多电脑基地的朋友使用win10操作系统已经很多年了.但是,有的小伙伴因为时间太久忘记了开机密码,但是试过好多密码都不对,那这个密码问题要怎么解决呢?下面,就来看看深度技术系统小编,怎么破解win10 ...

  5. 游戏技术博客推荐 Red Blob Games

    https://www.redblobgames.com/ 一名专注于游戏中算法实现的大佬

  6. 基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

      随着云原生技术和AI能力的不断成熟,如何将传统数据库.无服务器计算和人工智能有机结合,构建现代化的数据分析平台,并借助阿里云提供的基础组件构建应用.本文基于微软经典的WorldWideImport ...

  7. PPT(一)-默认设置

    一.暗夜模式 二.无限撤回 三.自动保存 四.图片压缩 五.字体嵌入 防止不同电脑打开字体不一样 六.多格式导出 实际上是可以将ppt文件导出成pdf.视频.图片形式的ppt的. ppt的每页导出成图 ...

  8. duxapp中主题系统是如何实现动态切换的

    在旧版本的duxapp,支持主题功能,但是那时候的主体是静态配置的,并不支持动态切换,新版本,在旧的静态主题基础上扩展,实现了动态主题切换 旧版本静态主题 在之前的版本中已经支持主题功能,在用户配置用 ...

  9. MyEMS开源能源管理系统核心代码解读014

    MyEMS开源能源管理系统适用于建筑.工厂.商场.医院.园区的电.水.气等能源数据采集.分析.报表,还有光伏.储能.充电桩.微电网.设备控制.故障诊断.工单管理.人工智能优化等可选功能.资深专业团队开 ...

  10. 当 HashMap 的容量达到负载因子设定的阈值时,会发生什么?扩容的过程是怎样的?

    达到负载因子设定阈值时的情况 HashMap 有两个重要参数:初始容量(默认 16)和负载因子(默认 0.75).当 HashMap 中存储的键值对数量超过了容量与负载因子的乘积(即阈值,thresh ...