JavaSE基础-Java字符串转整数与拼接实战指南

JavaSE基础-Java字符串转整数与拼接实战指南

目录

Java 核心知识点:字符串转整数与字符串相加

一、 字符串转整形数字

1.1 精简版(快速上手)

1.2 详细版(机制与陷阱)

1.3 关键陷阱总结表

二、 字符串相加

2.1 精简版(性能核心)

2.2 详细版(编译器优化与陷阱)

2.3 性能选择决策树

💡 一句话总结


本文总结Java中字符串转整数和字符串相加的核心知识点:1. 字符串转整数:推荐使用Integer.parseInt()方法,需注意处理NumberFormatException异常,对带空格的字符串要先trim(),大数值可使用Long.parseLong()或BigInteger。2. 字符串相加:编译期常量可使用+运算符(会被优化),但循环中必须使用StringBuilder以避免性能问题(性能差距可达200倍),多线程场景用StringBuffer,分隔符连接推荐String.join()。3. 关键陷阱:包括字符串转数字时的空值处理、进制转换问题,以及字符串拼接的性能优化策略。


Java 核心知识点:字符串转整数与字符串相加

一、 字符串转整形数字

1.1 精简版(快速上手)

Java

// 方式1:最常用(返回基本类型 int) String str = "123"; int num = Integer.parseInt(str); // 123 // 方式2:返回包装类(有缓存优化) Integer numObj = Integer.valueOf(str); // Integer 对象 // 异常处理(必加!) try { int badNum = Integer.parseInt("abc"); // 抛出 NumberFormatException } catch (NumberFormatException e) { System.out.println("不是有效数字"); } // 进制转换(如十六进制) int hex = Integer.parseInt("FF", 16); // 255 

1.2 详细版(机制与陷阱)

Java

public class StringToIntDemo { public static void main(String[] args) { // ========== 1. 核心方法对比 ========== // 【parseInt】返回基本类型 int,适合计算 // 内部逻辑:逐个字符解析,遇到非数字立即抛异常 int a = Integer.parseInt("100"); // 十进制 100 int b = Integer.parseInt("100", 8); // 八进制 100 = 64(十进制) int c = Integer.parseInt("100", 16); // 十六进制 100 = 256(十进制) // 【valueOf】返回 Integer 包装类,有缓存优化(-128~127) // 内部实际调用 parseInt,但会走缓存池 Integer obj1 = Integer.valueOf("100"); Integer obj2 = Integer.valueOf("100"); System.out.println(obj1 == obj2); // true(缓存命中,同一对象) // 【decode】支持 0x/0X/0/# 前缀自动识别进制 int d = Integer.decode("0xFF"); // 255(自动识别十六进制) int e = Integer.decode("#FF"); // 255(#也是十六进制标记) int f = Integer.decode("010"); // 8(0开头识别为八进制) // ========== 2. 异常处理(生产环境必看) ========== String risky = " 123 "; // 带空格 try { // 【陷阱1】前后空格会导致解析失败 int fail = Integer.parseInt(risky); // NumberFormatException // 【正确做法】先 trim int success = Integer.parseInt(risky.trim()); // 123 // 【陷阱2】空字符串和 null // Integer.parseInt(""); // NumberFormatException(空串) // Integer.parseInt(null); // NullPointerException(注意:不是 NumberFormatException!) } catch (NumberFormatException ex) { // 【最佳实践】记录日志并给出默认值或终止流程 System.err.println("非法数字格式:" + ex.getMessage()); int defaultVal = 0; } // ========== 3. 大数与边界 ========== // 【陷阱3】超出 int 范围(-2147483648 ~ 2147483647) // Integer.parseInt("2147483648"); // NumberFormatException(超出上限) // 【解决方案】用 Long long big = Long.parseLong("2147483648"); // 【解决方案】更大用 BigInteger(任意精度) java.math.BigInteger huge = new java.math.BigInteger("99999999999999999999"); } } 

1.3 关键陷阱总结表

输入字符串结果原因
"123"✅ 123标准十进制
" 123 "❌ 异常含空格,必须先 trim()
""❌ 异常空字符串无法解析
nullNPE非 NumberFormatException,需提前判空
"0xFF"❌ 异常parseInt 不认识前缀,用 decode 或指定 radix=16
"123.45"❌ 异常含小数点,应先用 Double.parseDouble 再转 int

二、 字符串相加

2.1 精简版(性能核心)

Java

// 方式1:+ 运算符(编译期常量优化) String s = "Hello" + " " + "World"; // 编译后直接为 "Hello World" // 方式2:循环中禁用 +(会产生大量临时对象) String; for (int i = 0; i < 100; i++) { result += i; // 每次循环都创建新的 StringBuilder 和 String 对象,极慢! } // 方式3:StringBuilder(单线程推荐) StringBuilder sb = new StringBuilder(); for (int i = 0; i < 100; i++) { sb.append(i); } String result = sb.toString(); // 方式4:String.join(Java 8+,连接多个字符串) String joined = String.join("-", "2024", "02", "23"); // "2024-02-23" 

2.2 详细版(编译器优化与陷阱)

Java

public class StringConcatDemo { public static void main(String[] args) { // ========== 1. 编译期优化(常量折叠) ========== // 【常量折叠】编译器在编译阶段直接计算出结果 String a = "Hello" + " " + "World"; // 编译后:String a = "Hello World"; // 【陷阱】变量参与时无法优化 String b = "Hello"; String c = b + " World"; // 编译后实际是:new StringBuilder().append(b).append(" World").toString() // ========== 2. 运行时拼接的本质(StringBuilder) ========== // 反编译后等价代码: // String temp = new StringBuilder().append(b).append(" World").toString(); // ========== 3. 循环中的致命陷阱 ========== // 【低效代码】O(n²) 复杂度,创建 n 个 StringBuilder 和 n 个 String 对象 String; for (int i = 0; i < 1000; i++) { bad += i; // 每次循环:new StringBuilder -> append -> toString } // 【高效代码】O(n) 复杂度,只创建一个 StringBuilder StringBuilder good = new StringBuilder(1000); // 预估容量,避免扩容 for (int i = 0; i < 1000; i++) { good.append(i); } String result = good.toString(); // 【性能对比】10000次拼接: // String+ 耗时:约 200-500ms // StringBuilder 耗时:约 1-2ms (差距200倍以上!) // ========== 4. 其他拼接方式 ========== // 【concat】String 自带方法,内部使用数组复制,比 + 快但不如 StringBuilder String s1 = "Hello".concat(" ").concat("World"); // 【join】Java 8 新增,适合用分隔符合并多个字符串 String[] parts = {"Java", "Python", "C++"}; String lang = String.join("、", parts); // "Java、Python、C++" // 【formatted】Java 15+ String info = "姓名:%s,年龄:%d".formatted("张三", 20); // 【StringJoiner】Java 8,适合构造带前后缀的字符串(如 SQL) java.util.StringJoiner joiner = new java.util.StringJoiner(", ", "[", "]"); joiner.add("A").add("B").add("C"); System.out.println(joiner.toString()); // [A, B, C] } } 

2.3 性能选择决策树

  • 需要拼接字符串?
    ├── 编译期常量(如 "a" + "b")→ 直接用 +(编译器优化)
    ├── 单线程运行时拼接
    │   ├── 次数 < 5 → 用 +(可读性好,性能可接受)
    │   └── 次数 ≥ 5 或循环中 → 用 StringBuilder
    ├── 多线程共享变量拼接 → 用 StringBuffer(线程安全)
    └── 需要分隔符连接多个字符串 → 用 String.join

💡 一句话总结

字符串转数字用 parseInt 要防 NumberFormatException 和空值;字符串相加在循环中必须用 StringBuilder,否则性能灾难。常量折叠让 "a"+"b" 在编译期就变成 "ab",但变量相加会在运行时走 StringBuilder

Read more

Spring AI 接入与简单使用:从环境搭建到多轮对话(JDK 17 + Spring Boot 3.5)

前言 Spring AI 是 Spring 生态中用于对接大语言模型(LLM)的抽象层,可以统一调用 OpenAI、Azure OpenAI、以及各类 OpenAI 兼容 API(如 DeepSeek、国内大模型等)。通过少量配置和几行代码,就能实现同步调用、流式输出,以及带上下文记忆的多轮对话,非常适合在现有 Spring Boot 项目里快速接入 AI 能力。本文基于 JDK 17、Spring Boot 3.5、Spring AI 1.1 记录从零接入到简单使用的完整过程,并总结对接时的注意项。 特别说明:本文除本段外,全部由AI生成。项目地址:https://gitee.com/husolar/

By Ne0inhk
Java 测试 18:Jacoco 代码覆盖率报告(Maven 整合配置)

Java 测试 18:Jacoco 代码覆盖率报告(Maven 整合配置)

👋 大家好,欢迎来到我的技术博客! 💻 作为一名热爱 Java 与软件开发的程序员,我始终相信:清晰的逻辑 + 持续的积累 = 稳健的成长。 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕一个常见的开发话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! Java 测试 18:Jacoco 代码覆盖率报告(Maven 整合配置) 🧪📊 在现代软件开发中,代码质量是保障系统稳定性和可维护性的基石。为了衡量代码质量,尤其是测试覆盖程度,代码覆盖率(Code Coverage)成为了不可或缺的指标。它反映了测试用例对源代码的覆盖范围,帮助开发者识别未被充分测试的代码路径,从而提升软件的可靠性。 JaCoCo(Java Code Coverage)是目前 Java 生态中最受欢迎和广泛使用的代码覆盖率工具之一。它能够精确地测量 Java 程序的执行情况,生成详细的覆盖率报告,包括行覆盖率、分支覆盖率、方法覆盖率等关键指标。

By Ne0inhk
惊了!用 JavaAI 撸电商核心功能,我从 “代码小白“ 变 “项目大神“,3 小时搞定别人 3 天的活

惊了!用 JavaAI 撸电商核心功能,我从 “代码小白“ 变 “项目大神“,3 小时搞定别人 3 天的活

惊了!用JavaAI撸电商核心功能,我从"代码小白"变"项目大神",3小时搞定别人3天的活(附完整流程+代码) 家人们谁懂啊!以前听说要做电商系统,我直接吓得关掉了IDEA——光是"商品管理"“订单流程”“购物车计算"这几个词,就够我啃一周文档。但自从用了JavaAI工具(我用的是飞算JavaAI,亲测好用),我发现开发居然能这么"躺平”:不用死磕SQL,不用纠结逻辑,甚至不用写重复代码,AI直接把"半成品"喂到嘴边,我只需要做"选择题"就行! 今天就带大家手把手用JavaAI开发电商3大核心模块:商品管理(上架/搜索/库存)、购物车(

By Ne0inhk
【飞算JavaAI】一站式智能开发,驱动Java开发全流程革新

【飞算JavaAI】一站式智能开发,驱动Java开发全流程革新

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT),经海量数据训练后能完成文本生成、图像创作等复杂任务,显著提升效率,但面临算力消耗、数据偏见等挑战。当前正加速与教育、科研融合,未来需平衡技术创新与伦理风险,推动可持续发展。 文章目录 * 前言 * 一、飞算 JavaAI 技术特性 * 二、飞算 JavaAI 重塑 AI 编码价值 * 三、飞算 JavaAI 功能进阶体验 * (一)智能引导——引导式开发更符合人脑思维习惯 * (二)Java Chat——深度融合上下文感知的智能编程AI助手 * (三)智能问答——灵活交互,实时解答 * (四)

By Ne0inhk