【Java 13文本块深度解析】:彻底掌握trimIndent()的5大核心用法与避坑指南

第一章:Java 13文本块与trimIndent()概述

Java 13 引入了文本块(Text Blocks)这一重要语言特性,旨在简化多行字符串的声明与维护。通过使用三重双引号(""")语法,开发者可以更直观地定义包含换行、缩进和特殊字符的字符串,避免传统字符串拼接或转义带来的可读性问题。

文本块的基本语法

文本块以三个双引号开始并结束,内容可跨越多行。其自动处理换行符,并保留内部格式。例如:

String html = """
    <html>
        <body>
            <p>Hello, World!</p>
        </body>
    </html>
    """;
System.out.println(html);
上述代码输出格式化的 HTML 字符串,无需手动添加 \n 或使用拼接。

使用 trimIndent() 处理缩进

在实际开发中,代码缩进可能导致字符串前导空格过多。Java 提供 trimIndent() 方法,用于移除每行前面的空白字符,仅保留逻辑结构所需的缩进。
  • 该方法会计算所有非空行的最小公共前导空格数
  • 然后从每一行中删除相应数量的空格
  • 适用于清理因代码格式化引入的额外空白
例如:

String query = """
        SELECT id, name
        FROM users
        WHERE active = true
        """.trimIndent();
// 结果不再包含左侧因对齐产生的多余空格
方法作用
stripIndent()已废弃,推荐使用 trimIndent()
trimIndent()移除多行字符串的公共前导空白
graph TD A[定义文本块] --> B{是否需要去除缩进?} B -->|是| C[调用 trimIndent()] B -->|否| D[直接使用] C --> E[获得整洁字符串] D --> E

第二章:trimIndent()的核心工作机制解析

2.1 理解文本块中的空白字符分布规律

在处理自然语言或代码解析时,空白字符(如空格、制表符、换行符)的分布对语义结构有重要影响。合理识别和归类这些字符有助于提升文本分析的准确性。
常见空白字符类型
  • 空格(Space):ASCII 32,最常见分隔符
  • 制表符(Tab):ASCII 9,用于对齐或字段分隔
  • 换行符(LF):ASCII 10,Unix/Linux 换行标准
  • 回车符(CR):ASCII 13,常与 LF 联用(CRLF)
代码示例:检测空白字符分布
import re

def analyze_whitespace(text):
    # 统计各类空白字符出现次数
    spaces = len(re.findall(r' ', text))
    tabs = len(re.findall(r'\t', text))
    newlines = len(re.findall(r'\n', text))
    return {'spaces': spaces, 'tabs': tabs, 'newlines': newlines}

sample = "Hello\tWorld\nHow are   you?"
print(analyze_whitespace(sample))  # 输出: {'spaces': 3, 'tabs': 1, 'newlines': 1}
该函数利用正则表达式分别匹配空格、制表符和换行符,统计其频次。通过分析结果可判断文本缩进风格(空格 vs Tab)或段落结构特征,为后续规范化处理提供依据。

2.2 trimIndent()的底层逻辑与去缩进策略

核心机制解析

trimIndent() 方法通过分析字符串中每行的公共前导空白来实现智能去缩进。其关键在于识别最小缩进值,并从所有行中移除等量字符。


val text = """
    Line 1
    Line 2
""".trimIndent()

上述代码中,三重引号内的每行均以四个空格开头。Kotlin 运行时会扫描所有非空行,计算最小前导空白长度(本例为4),然后逐行裁剪该长度的空白。

去缩进策略细节
  • 仅作用于换行符后的前导空白(空格与制表符)
  • 忽略全空白行,不参与最小缩进计算
  • 保留行内与行尾空白,确保语义不变
该策略确保多行字符串在代码中可格式化排版,同时输出时保持内容紧凑。

2.3 行首空格与制表符的归一化处理

在文本解析与代码格式化过程中,行首空格与制表符(Tab)的混合使用常导致缩进不一致问题。为确保语法结构正确且提升可读性,需对空白字符进行归一化处理。
常见空白字符类型
  • 空格(Space):ASCII 32,最常用的对齐方式
  • 制表符(Tab):ASCII 9,宽度可变,通常等价于 2~8 个空格
  • 换行符与回车:影响行边界判断,需同步处理
归一化策略实现
将所有行首制表符转换为统一数量的空格(如 4 空格/层级),可有效避免跨编辑器显示差异。以下为 Go 实现示例:
func normalizeIndent(line string) string {
    var result []rune
    for _, r := range line {
        if r == '\t' {
            // 每个 Tab 替换为 4 个空格
            result = append(result, ' ', ' ', ' ', ' ')
        } else if r == ' ' {
            result = append(result, ' ')
        } else {
            break // 非空白字符终止
        }
    }
    return string(result)
}
上述函数逐字符扫描行首空白,将每个制表符替换为 4 个空格,保证缩进一致性,适用于代码格式化工具预处理阶段。

2.4 多行字符串中最小公共前缀的计算原理

在处理多行字符串时,最小公共前缀(LCP)的计算常用于代码格式化、文本对齐等场景。其核心思想是逐列比较所有字符串的字符,直到某列出现不匹配或任一字符串结束。
算法步骤
  1. 将输入字符串按行分割为数组
  2. 遍历每一列索引,检查所有行在该位置的字符是否一致
  3. 一旦发现不匹配或越界,返回此前累积的前缀
实现示例
func longestCommonPrefix(strs []string) string {
    if len(strs) == 0 { return "" }
    for i := 0; i < len(strs[0]); i++ {
        char := strs[0][i]
        for j := 1; j < len(strs); j++ {
            if i >= len(strs[j]) || strs[j][i] != char {
                return strs[0][:i]
            }
        }
    }
    return strs[0]
}
上述函数逐列比对字符,时间复杂度为 O(S),S 为所有字符串总长度。参数 strs 为输入字符串切片,返回值为最长公共前缀。

2.5 trimIndent()与其他字符串方法的对比分析

在 Kotlin 中,trimIndent() 专门用于处理多行字符串中的缩进,尤其适用于三重引号(""")包裹的文本。与 trim() 和 trimMargin() 相比,其设计目标更为明确。
核心功能对比
  • trim():仅去除首尾空白字符,无法处理每行前的缩进;
  • trimMargin():基于指定符号(默认为 |)去除每行前的前缀内容;
  • trimIndent():自动识别并移除所有行共有的最小缩进量。
val text = """
    |Hello
    |World
""".trimMargin()

val indented = """
    First line
      Indented second line
    Last line
""".trimIndent()
上述代码中,trimMargin() 移除每行以 | 开头的前缀,而 trimIndent() 智能计算出公共空格数(此处为4),并将其从每行中剔除,保留相对缩进结构。这种机制更适合格式化模板文本或嵌入式 DSL。

第三章:典型应用场景实战

3.1 格式化SQL语句嵌入Java代码的最佳实践

在Java应用中嵌入SQL语句时,保持语句的可读性与可维护性至关重要。使用多行字符串和参数占位符能显著提升代码清晰度。
使用预编译语句防止SQL注入
String sql = "SELECT id, name FROM users WHERE status = ? AND created_time > ?";
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
    stmt.setString(1, "ACTIVE");
    stmt.setTimestamp(2, startTime);
    ResultSet rs = stmt.executeQuery();
}
该示例通过?占位符实现参数化查询,避免拼接字符串带来的安全风险。参数由setString和setTimestamp方法安全绑定,提升执行效率与安全性。
格式化长SQL提升可读性
采用换行与缩进使SQL结构清晰:
  • 每行一个字段或条件
  • 关键字大写,增强辨识度
  • 结合StringBuilder或文本块(Java 15+)拼接

3.2 构建JSON字符串时保持可读性的技巧

在开发调试或日志输出场景中,构建具有良好可读性的 JSON 字符串至关重要。使用格式化输出能显著提升数据的可读性。
启用格式化输出
大多数编程语言提供的 JSON 序列化方法支持格式化参数。例如,在 Go 中:
data := map[string]interface{}{
    "name": "Alice",
    "age":  30,
    "tags": []string{"developer", "go"},
}
jsonBytes, _ := json.MarshalIndent(data, "", "  ")
fmt.Println(string(jsonBytes))
MarshalIndent 的第二个参数为前缀(通常为空),第三个参数为缩进字符(如两个空格),生成的 JSON 每层嵌套都会换行并缩进,便于阅读。
统一缩进风格
团队应约定缩进风格(如 2 空格或 4 空格),并在所有服务中保持一致。此外,可通过配置序列化器默认启用格式化选项,避免遗漏。

3.3 在模板生成中精准控制换行与缩进

在模板引擎中,输出的格式化直接影响生成代码或配置文件的可读性。合理控制换行与缩进是确保结构清晰的关键。
模板中的空白字符处理
多数模板引擎(如Go template、Jinja2)默认保留所有空白字符。多余的空行和缩进会导致输出冗余,尤其在生成YAML或JSON时易引发语法错误。
使用管道修饰符控制格式
{{- .Content -}}
{{ .Name | printf "%-10s" }}
上述Go template代码中,{{- ... -}} 表示去除前后空白,避免插入多余换行;printf 用于对齐字段,提升可读性。
  • {{- :删除左侧空白
  • -}}:删除右侧空白
  • 组合使用可精确控制布局

第四章:常见陷阱与性能优化建议

4.1 混用空格与制表符导致的意外格式错乱

在多开发者协作的项目中,混用空格与制表符(Tab)是引发代码格式错乱的常见根源。不同编辑器对 Tab 的缩进宽度解析不一致,可能导致代码在视觉上错位,进而影响可读性与逻辑判断。
典型问题示例

def calculate_total(items):
→  total = 0          # 使用 Tab 缩进
   for item in items: # 使用 4 个空格缩进
→  →total += item
   return total
上述代码在部分编辑器中会抛出 IndentationError,因为 Python 严格要求缩进一致性。Tab 被视为一个字符,而空格为独立单位,混合使用破坏了语法结构。
规避策略
  • 统一团队编码规范:推荐使用 4 个空格代替制表符
  • 配置编辑器自动转换:保存时将 Tab 替换为空格
  • 启用 linter 工具(如 Flake8)检测混合缩进
通过标准化缩进方式,可有效避免因格式差异引发的语法错误与协作障碍。

4.2 跨平台换行符对trimIndent()行为的影响

在多平台开发中,换行符差异(如 Windows 的 \r\n 与 Unix 的 \n)可能影响 Kotlin 的 trimIndent() 函数行为。该函数通过分析首行缩进删除统一前导空格,但若换行符格式不一致,可能导致行间分割异常。

典型问题示例

val text = """
    Line 1\r\n
    Line 2\n
    Line 3
""".trimIndent()

上述代码在混合换行符环境下,可能因 \r\n 未被统一处理而导致缩进计算偏差,最终输出的字符串各行前缀空格不一致。

解决方案与建议
  • 在调用 trimIndent() 前,统一使用 .replace("\r\n", "\n") 规范换行符;
  • 测试时覆盖多平台换行符场景,确保文本处理逻辑稳定。

4.3 动态拼接文本块后trimIndent()失效问题

在 Kotlin 中,`trimIndent()` 常用于清除多行字符串中公共的前导空白。然而,当字符串通过 `+` 或 `buildString` 动态拼接时,`trimIndent()` 可能无法正确识别统一缩进。
问题复现

val part1 = """
    |第一段
    |内容
""".trimMargin()

val part2 = """
    |第二段
    |内容
""".trimMargin()

val combined = (part1 + part2).trimIndent()
println(combined)
上述代码中,尽管每部分独立时格式正常,拼接后的整体因换行与空格分布不均,导致 `trimIndent()` 仅移除最小公共缩进,无法完全对齐。
解决方案
建议在拼接前统一处理缩进,或使用 `trimMargin()` 配合标记符更精确控制:
  • 优先使用 `trimMargin()` 并显式指定分隔符
  • 若必须使用 `trimIndent()`,应在最终拼接后重新包裹文本块

4.4 避免过度调用trimIndent()带来的性能损耗

在 Kotlin 中,trimIndent() 常用于格式化多行字符串,但频繁调用可能带来不必要的性能开销。
性能瓶颈分析
每次调用 trimIndent() 都会遍历字符串每一行计算最小缩进,并生成新字符串。在循环或高频调用场景下,这种操作会导致大量临时对象创建。

val template = """
    |fun hello() {
    |    println("Hello")
    |}
""".trimIndent() // 推荐:仅初始化时调用一次
该代码将 trimIndent() 的调用限定在常量初始化阶段,避免重复执行,显著降低 GC 压力。
优化策略
  • 将处理后的字符串缓存为常量或成员变量
  • 避免在循环体内调用 trimIndent()
  • 考虑使用 replaceIndent() 进行更精细控制

第五章:总结与未来展望

技术演进趋势
现代后端架构正加速向服务网格与边缘计算迁移。以 Istio 为代表的控制平面已广泛集成于 Kubernetes 集群中,实现细粒度的流量管理与安全策略下发。
实战优化案例
某金融级应用通过引入 gRPC 双向流式调用,将跨数据中心通信延迟降低 40%。关键代码如下:

// 流式处理用户交易事件
func (s *Server) StreamTransactions(req *pb.Request, stream pb.Service_StreamTransactionsServer) error {
    for {
        select {
        case event := <-s.eventChan:
            if err := stream.Send(event); err != nil {
                return err
            }
        case <-time.After(30 * time.Second):
            return nil // 超时自动断开保持连接健康
        }
    }
}
可观测性增强方案
完整的监控闭环需包含指标、日志与链路追踪。以下为 OpenTelemetry 的典型部署配置:
组件采集方式目标系统
OTLP ReceivergRPC/HTTPCollector
Jaeger ExporterThriftTracing Backend
Metrics AdapterPrometheus ScrapeGrafana
未来架构方向
  • 基于 WebAssembly 的插件化网关已在 Envoy 中落地,支持动态加载策略逻辑
  • AI 驱动的异常检测模型接入 Prometheus 报警管道,显著降低误报率
  • 零信任安全模型推动 mTLS 全链路加密成为默认配置
[Client] --(mTLS)--> [Ingress Gateway] --(WASM Filter)--> [Service A] ↓ [Telemetry Collector] → [AI Analyzer]
具有PWM控制VSC-HVDC链路的IEEE30总线传输系统(Simulink仿真实现) 内容概要:本文构建了一个包含PWM控制VSC-HVDC链路的IEEE30节点电力传输系统,并基于Simulink平台完成了系统的建模仿真。该模型聚焦于高压直流输电(HVDC)技术在区域电网互联中的应用,采用电压源型换流器(VSC)与脉宽调制(PWM)技术实现高效、灵活的电能传输。研究重点在于分析VSC-HVDC链路在复杂多节点电网中对潮流分布、系统稳定性及电能质量的调控能力,特别关注其在区域电网互联、新能源大规模接入以及跨区域电力交换等场景下的动态响应特性与控制性能,为现代智能电网的发展提供技术支撑与仿真验证手段。; 适合人群:具备电力系统、电气工程或自动化等相关专业背景的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究VSC-HVDC在多节点电网(如IEEE30节点)中的建模与仿真方法;②分析PWM控制策略下HVDC链路对电网潮流分布、电压稳定性和故障穿越能力的影响;③为区域电网互联、新能源并网及智能电网调度等课题提供仿真基础和技术验证。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者在掌握电力电子技术和电力系统分析基础知识的前提下,结合仿真模型深入理解VSC-HVDC的工作原理与控制策略。在学习过程中,应着重关注模型参数设置、控制环路设计及仿真结果的分析,以达到理论与实践相结合的目的。 立即下载

相关推荐

基于KDE-CDF置信带的不确定综合能源系统鲁棒调度优化研究(Matlab代码实现)

内容概要:本研究针对不确定综合能源系统中的鲁棒调度优化问题,提出一种基于核密度估计-累积分布函数(KDE-CDF)置信带的建模方法,用以精确刻画风能、光伏及负荷等不确定性因素的非正态概率分布特征。通过构建KDE-CDF模型,能够有效捕捉实际运行中新能源出力与负荷需求的波动性与随机性,并在此基础上设计鲁棒优化调度框架,提升系统在不确定性环境下的运行可靠性与经济性。该方法结合Matlab编程实现,综合考虑系统运行成本、峰谷差、碳排放等多重目标,实现多维度协调优化。研究还探讨了与智能优化算法(如粒子群算法)相结合的应用路径,增强了模型的求解效率与工程实用性,为含多种储能装置、电转气设备及碳捕集系统的复杂综合能源系统提供了科学的调度决策支持。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事综合能源系统规划、运行与调度工作的工程技术人员。; 使用场景及目标:①解决高比例可再生能源接入背景下综合能源系统调度中的不确定性建模难题;②提升调度方案在面对新能源强波动性时的鲁棒性与适应能力;③为融合多类型灵活性资源(如储能、电转气、碳捕集)的综合能源系统提供精细化、可落地的优化运行策略。; 阅读建议:建议读者在掌握概率统计、随机优化与电力系统运行基础知识的前提下,结合文中提供的Matlab代码进行实践操作,重点关注KDE-CDF置信带的构建流程及其在鲁棒优化模型中的嵌入机制,通过调整输入数据分布、参数设置与场景配置开展仿真对比实验,深入理解不确定性建模精度对调度决策质量的影响,进而掌握从数据驱动角度提升系统鲁棒性的关键技术路径。

Kotlin基础语法教程(一)

目录Kotlin基础语法教程(一)Kotlin概述基础语法Hello World变量和数据类型常量和变量基本数据类型非空类型与可空类型函数声明字符串模板流程控制if语句/表达式when语句/表达式循环语句带标签的break和continueKotlin运算符算术运算符、逻辑运算符和关系运算符位运算符其他运算符局部函数和匿名函数数组基本数据类型数组对象数组Kotlin概述Kotlin是由开发过Int...

hehuoU的博客 1492

【Origin+Python】使用External Python批量出图代码参考2

不使用part2 的代码,自己打开一个origin2022的界面。这里主要介绍一些进阶代码以及使用盗版origin要如何。3 批量绘制相同设置的曲线图。然后就是没有水印的图片了。

zeng001201的博客 1908

Android开发者快速上手Kotlin(一) 之 简介和基本语法

1 前言 在开始语法学习Kotlin之前,先说说本系列文章内容的大概的定位,本系统文章只是针对Android开发者快速上手Kotlin语言,大多时候在语法的介绍时会跟Java语言作比较,一些基本上跟Java差别不大的地方可能并不会介绍到,所以如果你并不想花太多时间去阅读枯燥无味的官方文档又希望快速上手的话,那恭喜你是来对地方了。同时并建议,如果你是没有Java语言基础的同学,对不起,这篇文章可能...

子云心的博客 1700

Cadence Virtuoso IC617:从零构建传输门与反相器的Schematic设计实战

本文详细介绍了使用Cadence Virtuoso IC617进行传输门与反相器Schematic设计的完整流程,包括环境准备、原理图绘制、Symbol创建、仿真验证及实用技巧。通过分步指导和实战经验分享,帮助初学者快速掌握集成电路设计基础,提升EDA工具应用能力。

weixin_29194693的博客 602

kotlin 三引号字符串(Triple-quoted strings) trimMargin

const val question = "life, the universe, and everything" const val answer = 42 val tripleQuotedString = """ #question = "$question" #answer = $answer""".trimMargin("#") fun main() { println(tripleQuotedString) } 结果: question = "life, the un

weixin_44727250的博客 1686

EEGLAB合辑 | 第一节 往EEGLAB导入数据

1、学习Matlab EEGLAB图形界面建立在强大的Matlab脚本语言之上。要使用EEGLAB构建宏命令和执行自定义和自动化处理的全部功能,就需要能够在Matlab中操纵EEGLAB数据结构。由于时间限制,这个wiki没有提供关于Matlab脚本语言的介绍。相反,用户需要在开始研究之前熟悉Matlab。 2、安装EEGLAB和教程文件 首先下载包含教程数据集的EEGLAB(30MB),附下载地址。 (https://sccn.ucsd.edu/eeglab/downloadtoolbox.php) 解压

nvsirgn的博客 5136

Kotlin基础学习---数据类型(一)

一、Boolean类型 二、Number数据类型 三、拆箱装箱与Char数据类型 四、基础数据类型转换与字符串 一、Boolean类型 Boolean类型没什么好说,无非就是两个值:true和false,为什么要单独拿出来说呢,主要是和Number数据类型做区分。我们就用程序简单输出一下boolean变量的值 fun main(args: Array<String>) {...

qq_32019367的博客 395

从零开始用TS开发babylonjs - 本机环境搭建

babylonjs,初始化本地安装,web3d引擎

han3527638的专栏 798

SC-FDMA

<br />SC-FDMA(Single-carrier Frequency-Division Multiple Access,單載波分頻多工),是LTE的上行鏈路的主流多址。<br />SC-FDMA是單波載(Single-carrier),與OFDMA相比之下具有的較低的PAPR(峰值/平均功率比,peak-to-average power ratio),比多載波的PAPR低1-3dB左右(PAPR是由于多載波在频域叠加引起)。更低的PAPR可以使行動終端(mobile terminal)在發送功效方面

jod的专栏 3299

揭秘Java 13文本块新特性:如何用trimIndent()优雅处理多行字符串缩进

掌握Java 13文本块的trimIndent(),轻松解决多行字符串缩进难题。适用于生成SQL、JSON或HTML等场景,保持代码整洁与可读性。通过trimIndent()自动去除多余空白,提升字符串处理效率,Java开发者值得收藏。

SimCompile的博客 970

机器学习实战7-基于机器学习算法预测相亲成功率

大家好,我是微学AI,今天给大家介绍一下机器学习实战7-基于机器学习算法预测相亲成功率,随着社会的发展,大家都忙于事业,对自己的终身大事就耽搁了,相亲是一种传统的寻找伴侣的方式,随着时代的发展,相亲的方式也在不断地改变。在这个过程中,了解相亲双方的信息以及预测相亲是否成功变得越来越重要。本文将介绍如何使用随机森林算法对相亲成功进行预测,通过分析男女双方的房子、车子、长相、家庭条件、父母情况、生活习惯、学历、性格、兴趣等因素,来预测相亲是否成功。

微学AI的博客 3040

CH34xUART 1.0.0 安卓库集成实战:适配Android 13,修复3个关键Bug

本文详细介绍了CH34xUART 1.0.0安卓库在Android 13上的适配与关键Bug修复实战。通过优化线程管理、增强事件回调机制及现代化架构设计,解决了USB转串口通信中的常见问题,特别适合物联网和嵌入式开发领域的应用开发。

weixin_30323631的博客 436

java零基础从入门到精通(全)

目录前言1. 入门知识1.1 java体系1.2 JDK/JRE/JVM区别1.3 编译与运行理解1.4 类体函数细节2. 标识符 前言 java优势 健壮性(JVM(C++语言写的一个虚拟的计算机)、GC(垃圾回收机制)) 多线程并发 可移植性/跨平台 1. 入门知识 1.1 java体系 JavaSE:标准版 JavaEE:企业版 JavaME:微型版 1.2 JDK/JRE/JVM区别 JVM是不能独立安装的。 JRE和JDK都是可以独立安装的 层层嵌套,jvm包括jdk,jdk包括jre

码农研究僧的博客 6万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

为什么你的文本块缩进总是出错?trimIndent()的隐藏规则终于说清了

掌握Java 17 文本块的 trimIndent() 方法,轻松解决多行字符串缩进错乱问题。适用于生成HTML、SQL或配置文件等场景,精准控制空白字符,提升代码可读性与格式一致性。原理与实战解析一文说清,值得收藏。

FuncTide的博客 656

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

告别手动去空格:trimIndent()自动清理文本块缩进的底层原理揭秘

轻松解决多行字符串缩进烦恼,深入解析Java 13 文本块 trimIndent () 效果。适用于格式化SQL、JSON等场景,精准去除公共前导空格,提升代码可读性与维护效率。底层原理揭秘,值得收藏。

CompiGlow的博客 632

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《Kotlin 极简教程 》第4章 基本数据类型与类型系统

第4章 基本数据类型与类型系统 《Kotlin极简教程》正式上架: 点击这里 &gt; 去京东商城购买阅读 点击这里 &gt; 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ 到目前为止,我们已经了解了Kotlin的基本符号以及基础语法。我们可以看出,使用Kotlin写的代码更简洁、可读性更好、更富有...

AI天才研究院 9031

【Kotlin 初学者】字符串常用操作汇总

String类表示char类型的数组。字符串是不可变的,这意味着长度和元素在创建后不能更改。因为字符串对象是不可变的,所以可以共享它们。

帅次的博客 7485

可怕!从简洁高效的角度来说,Kotlin比Java强太多了吧!难道Java真的要被替代了?

用Kotlin开发Android程序也有几个月了,这里

你关注了我,是个概率极低的事件...... 1万+

Kotlin中的基本类型(—)

1.Any根类型 Kotlin 中所有类都有一个共同的超类 Any ,如果类声明时没有指定超类,则默认为 Any。Any在运行时,其类型自动映射成java.lang.Object。在Java中Object类是所有引用类型的父类。但是不包括基本类型:byte int long等,基本类型对应的包装类是引用类型,其父类是Object。而在Kotlin中,直接统一,所有类型都是引用类型,统一继承父类A...

秦川小将 2926

有趣的 Kotlin 0x02:Indent trimming

最近在 http://portal.kotlin-academy.com/#/ 上看到很多关于 Kotlin 的有趣的题目。个人觉得很适合 Kotlin 爱好者,感兴趣的小伙伴可自行查阅。 【有趣的 Kotlin 】系列记录自己对每一题的理解。 0x02:Indent trimming fun main(args: Array<String>) { val world = "multiline world" println(""" Hello \$world """.

AndroidKt 815

Electron打包exe的使用

一 基础操作 1 创建项目 1.1 使用cnpm加速下载 npm有时下载速度很慢,可以安装cnpm,从国内淘宝镜像下载,执行以下命令: npm install -g cnpm --registry=https://registry.npm.taobao.org 以后npm直接替换成cnpm使用。 1.2 为什么不使用SimulatedGREG/electron-vue Si...

sjs_caomei的博客 2157

sublime Text3技巧

想必很多人在用吧,谈谈我个人的使用情况。也为了总结一下,万一哪天从新安装它时,也知道自己都在用哪些技巧和插件以及配置方法。 一、快捷键 首先有个Preferences &amp;amp;amp;amp;amp;gt; KeyBindings 这里面提供了所有的默认快捷的,如果有时间可以看看。如果自己想要设置一些,在右侧里仿照着写就行。 ctrl + shift + p : 调出命令编辑框 安装插件时输入Package Cont

liuyongshun2的博客 5338

Kotlin在Android端的基本用法详解

作者:谭东 Kotlin相信现在大家都不陌生了,它是谷歌在5月18日,它的安卓团队在Google I/O 2017 大会上正式宣布 Kotlin 成为官方头等支持语言。最近一段时间我学习和研究了下Kotlin的特点和基本用法。大概用了一天时间,把Android的一些主要的APP功能,用Kotlin语言和结构重新写了一遍,体会就是:上手和学习很快、语法简洁、代码少写了很多、不用很麻烦的写控

贵公子丶笔记 1566
上一篇: Java 11 HttpClient超时设置避坑指南:90%开发者忽略的3个细节
下一篇: LinkedHashMap 的 accessOrder 详解:你真的懂 LRU 缓存实现原理吗?
SimProceed
博客等级 码龄1年 146粉丝 2011原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值